Shmily

Everything Is Going To Be Alright

Algoritma Shannon-fano for C#

1 Comment


Sekilas tentang algoritma Shano-Phano , Algoritma shannon-fano coding, ditemukan Claude Shannon (bapak teori informasi) dan Robert Fano pada tahun 1949, pada saat itu metode ini merupakan metode yang paling baik tetapi hampir tidak pernah digunakan dan dikembangkan lagi setelah kemunculan algoritma huffman pada dasarnya metode ini menggantikan setiap simbol dengan sebuah alternatif kode biner yang panjannya ditentukan berdasarkan probabilitas dari simbol tersebut di bidang kompresi data, Shannon Fano coding adalah teknik membangun sebuah kode awalan didasarkan pola seperangkat simbol dan probabilitas (diperkirakan atau diukur). Namun, algortimanya ini dirasa kurang optimal dalam arti bahwa ia tidak mampu mencapai kode seefisien mungkin seperti kode diharapkan panjang seperti algoritma huffman.

mungkin cukup sekian tentang sejarah nya, sekarang saya akan coba implementasikan Algoritma Shannon fano.

1. Jalankan Visual Studio nya saya disini memakai Visual Studio 2010 Ultimate

Visual Studio 2010 ultimate

2. buat new project baru beri nama “shannon_fano”, seperti gambar di bawah ini
Algoritma_shannon New Project

3. lalu sisipkan Coding Seperti Di bawah ini:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Collections;

namespace shanonphano2
{
public partial class Form1 : Form
{
private int k;
private TreeNode root;
private TreeNode kiri;
private TreeNode kanan;
private int j;
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
string output, data;
Boolean statustitle;
int indek, juml;

data = textBox1.Text.Trim().ToUpper();
output = “”;
indek = 0;
juml = 0;
dataGridView1.Rows.Clear();

label1.Text = data.Length.ToString();
label1.Text += “karakter”;
for (int i = 0; i < data.Length; i++)
{
if (data.Substring(i, 1) == "")
{
data = data.Remove(i, 1);
}
statustitle = true;
for (int j = i + 1; j < data.Length; j++)
{
if (data.Substring(i, 1) == data.Substring(j, 1))
{
statustitle = false;
}

}
if (statustitle == true)
{
dataGridView1.Rows.Add(1);
output = output + data.Substring(i, 1);
dataGridView1.Rows[indek].Cells[0].Value = data.Substring(i, 1);
data.Substring(i, 1);
indek = indek + 1;
}
}
for (int i = 0; i < (dataGridView1.Rows.Count – 1); i++)
{
juml = 0;
for (int j = 0; j < data.Length; j++)
{
if (dataGridView1.Rows[i].Cells[0].Value.ToString() == data.Substring(j, 1))
{
juml = juml + 1;
}
}
dataGridView1.Rows[i].Cells[1].Value = (juml).ToString();
}
treeView1.Nodes.Clear();
root = treeView1.Nodes.Add(data.Length.ToString());
sortdata();
//DataGridViewColumn newColumn = dataGridView1.Columns[1];
//dataGridView1.Sort(newColumn, ListSortDirection.Descending);
drawTree();

}

public void sortdata()
{
int temp;
string tempKa;

k = 0;
ArrayList tempData = new ArrayList();
ArrayList tempKarakter = new ArrayList();
tempData.Clear();
tempKarakter.Clear();

for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
tempData.Add(Convert.ToInt16(dataGridView1.Rows[i].Cells[1].Value));
tempKarakter.Add(Convert.ToString(dataGridView1.Rows[i].Cells[0].Value));
}
for (int i = 0; i < tempData.Count – 1; i++)
{
for (int j = 0; j Convert.ToInt16(tempData[j]))
{
temp = Convert.ToInt16(tempData[j]);
tempData[j] = Convert.ToInt16(tempData[j + 1]);
tempData[j + 1] = temp;
tempKa = tempKarakter[j].ToString();
tempKarakter[j] = tempKarakter[j + 1].ToString();
tempKarakter[j + 1] = tempKa;
}
}
}
for (k = 0; k < tempData.Count; k++)
{
dataGridView1.Rows[k].Cells[1].Value = tempData[k].ToString();
dataGridView1.Rows[k].Cells[0].Value = tempKarakter[k].ToString();
}
dataGridView1.Rows[k – 1].Cells[1].Value = "";
}
public void drawTree()
{
for (int i = 0; i < dataGridView1.Rows.Count – 2; i++)
{
if (i == 0)
{
kiri = root.Nodes.Add("0" + dataGridView1.Rows[i].Cells[0].Value.ToString().ToUpper() + ":(" + dataGridView1.Rows[i].Cells[1].Value.ToString() + ")");
kanan = root.Nodes.Add("1");
}
else if (i == dataGridView1.Rows.Count – 3)
{
kiri = kanan.Nodes.Add("0" + dataGridView1.Rows[i].Cells[0].Value.ToString().ToUpper() + ":(" + dataGridView1.Rows[i].Cells[1].Value.ToString() + ")");
kanan = kanan.Nodes.Add("1" + dataGridView1.Rows[i + 1].Cells[0].Value.ToString().ToUpper() + ":(" + dataGridView1.Rows[i + 1].Cells[1].Value.ToString() + ")");
}
else
{
kiri = kanan.Nodes.Add("0" + dataGridView1.Rows[i].Cells[0].Value.ToString().ToUpper() + ":(" + dataGridView1.Rows[i].Cells[1].Value.ToString() + ")");
kanan = kanan.Nodes.Add("1");

}
}
treeView1.ExpandAll();
for (int i = 0; i < dataGridView1.Rows.Count – 1; i++)
{
if (i < dataGridView1.Rows.Count – 2)
{
dataGridView1.Rows[i].Cells[2].Value = "0";
for (int j = 0; j < i; j++)
{
dataGridView1.Rows[i].Cells[2].Value = dataGridView1.Rows[i].Cells[2].Value.ToString() + "1";
}
}
else
{
dataGridView1.Rows[i].Cells[2].Value = "";
for (int j = 0; j < i; j++)
{
dataGridView1.Rows[i].Cells[2].Value = dataGridView1.Rows[i].Cells[2].Value.ToString() + "1";
}
}
}
}
}
}

contoh program output diatas jika berhasil, maka akan tampil seperti di bawah ini

output program

Jika kesulitan koment saja., semoga bermamfaat

Advertisements

Author: shmily49

saya orang yang ingin tau banyak hal

One thought on “Algoritma Shannon-fano for C#

  1. No comment

    Like

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s