Perbandingan Algoritma Elias Gamma Code Dengan Shannon-Fano Untuk Kompresi File Teks

65

LISTING PROGRAM

1. Mainform.cs
using
using
using
using

stem;
Sy
System.Collections.Generic;
System.Drawing;
System.Windows.Forms;

namespace Home
{
///
/// Description of MainForm.
///

public partial class MainForm : Form
{
public MainForm()
{
//
// The InitializeComponent() call is required for Windows
Forms designer support.
//
InitializeComponent();
//
// TODO: Add constructor code after the
InitializeComponent() call.
//
}
void MainFormLoad(object sender, EventArgs e)
{
Home frmcld = new Home();
frmcld.MdiParent=this;
frmcld.Show();
}

void AboutToolStripMenuItemClick(object sender, EventArgs e)
{
About frmcld = new About();
frmcld.MdiParent=this;
frmcld.Show();
}
void EliasGammaCodeToolStripMenuItemClick(object sender, Even
tArgs e)
{
Elias frmcld = new Elias();
frmcld.MdiParent=this;
frmcld.Show();
}
void ShannonFanoToolStripMenuItemClick(object sender, EventAr
gs e)
{
Shannon frmcld = new Shannon();
frmcld.MdiParent=this;
frmcld.Show();


Universitas Sumatera Utara

66

}
void HelpToolStripMenuItemClick(object sender, EventArgs e)
{
Help frmcld = new Help();
frmcld.MdiParent=this;
frmcld.Show();
}
void ExitToolStripMenuItemClick(object sender, EventArgs e)
{
this.Close();
}
void HomeToolStripMenuItemClick(object sender, EventArgs e)
{
Home frmcld = new Home();
frmcld.MdiParent=this;
frmcld.Show();

}
}
}

2. Elias.cs
using stem;
Sy
using System.Drawing;
using System.IO;
using System.Dynamic;
using System.Windows.Forms;
using System.Text;
using System.Collections.Generic;
using IronPython.Hosting;
namespace Home
{
///
/// Description of Elias.
///
public partial class Elias : Form

{
public Elias()
{
//
// The InitializeComponent() call is required for Windows
Forms designer support.
//
InitializeComponent();
//
// TODO: Add constructor code after the
InitializeComponent() call.
//
}
void ButtonBrowseClick(object sender, EventArgs e)
{
OpenFileDialog dialog = new OpenFileDialog();
dialog.Filter = "Document (MsWord)|*.doc";
dialog.Title = "Open file doc : ";
dialog.RestoreDirectory = true;


Universitas Sumatera Utara

67

if(dialog.ShowDialog() == DialogResult.OK){
string dirName =
System.IO.Path.GetDirectoryName(dialog.FileName);
var fileinfo = new FileInfo(dialog.FileName);
var size= fileinfo.Length;
string drive =
dirName.Split(System.IO.Path.VolumeSeparatorChar)[1];
txtUkuranFileE.Text=size.ToString();
textBoxLoadFilePath.Text =
dirName + "\\" + dialog.SafeFileName.ToString();
}
buttonBaca.Enabled = true;
}
void ButtonBacaClick(object sender, EventArgs e)
{
Microsoft.Office.Interop.Word.Application wordApp = new

Microsoft.Office.Interop.Word.ApplicationClass();
object filenameO = textBoxLoadFilePath.Text.ToString();
object objFalse = false;
object objTrue = true;
object missing = System.Reflection.Missing.Value;
object emptyData = string.Empty;
try{
Microsoft.Office.Interop.Word.Document aDoc
= wordApp.Documents.Open(ref filenameO, ref objFalse, ref objTrue, r
ef missing, ref missing, ref missing, ref missing, ref missing, ref m
issing, ref missing, ref objTrue, ref missing, ref missing, ref missi
ng, ref missing);
aDoc.ActiveWindow.Selection.WholeStory();
aDoc.ActiveWindow.Selection.Copy();
IDataObject data =
System.Windows.Forms.Clipboard.GetDataObject();
String fileText =
data.GetData(System.Windows.Forms.DataFormats.Text).ToString();
System.Windows.Forms.Clipboard.SetDataObject(string.E
mpty);

textBoxDisplayText.Text = fileText;
}
catch(Exception err){
MessageBox.Show(err.Message);
}
finally{
MessageBox.Show("File berhasil dibaca");
}
btnCompressEG.Enabled = true;
}
void BtnCompressEGClick(object sender, EventArgs e)
{
var input = textBoxDisplayText.Text;
try
{
var ipy = Python.CreateRuntime();
dynamic eliasgamma =

Universitas Sumatera Utara


68

ipy.UseFil
e
("eliasgamma.py");
DateTime startTime = DateTime.Now;
dynamic CR = eliasgamma.processEG(input);
dynamic RedudancyData =
eliasgamma.processEG1(input);
dynamic hasilCompress =
eliasgamma.processEG2(input);
DateTime endTime = DateTime.Now;
TimeSpan elapsed =
endTime.Subtract(startTime);
txtWaktuKompres.Text =
elapsed.Hours.ToString("00") + ":" +
elapsed.Minutes.ToString("00") + ":" + elapsed.Se
conds.ToString("00") + "." +
elapsed.Milliseconds.ToString("000");
txtRedudancyElias.Text= RedudancyData.ToString();

txtHasil.Text = hasilCompress.ToString();
txtRasio.Text = CR.ToString();
File.WriteAllText("D:/data.txt", txtHasil.Text);
var fileinfo = new FileInfo("D:/data.txt");
var size= fileinfo.Length;
ukuranfile.Text=size.ToString();
}catch(Exception ex){
MessageBox.Show(ex.ToString());
}
btnDecompressEG.Enabled = true;
}
void TimereliasTick(object sender, EventArgs e)
{
}

void BtnDecompressEGClick(object sender, EventArgs e)
{
SaveFileDialog saveFileDialog1 = new SaveFileDialog();
saveFileDialog1.Filter = "Word 1997-2003|*.doc|Word 20072013|*.docx|Rich Text File|*.rtf|All Files (*.*)|*.*";
saveFileDialog1.Title = "";

var input = textBoxDisplayText.Text;
try
{
var ipy = Python.CreateRuntime();
dynamic eliasgamma =
ipy.UseFile("eliasgamma.py");
DateTime startTime = DateTime.Now;
dynamic hasilDecompress =
eliasgamma.processEG3(input);
DateTime endTime = DateTime.Now;
TimeSpan elapsed =
endTime.Subtract(startTime);
txtWaktuDekompres.Text =
elapsed.Hours.ToString("00") + ":" +
elapsed.Minutes.ToString("00") + ":" + elapsed.Se

Universitas Sumatera Utara

69

conds.ToStri
ng

("00") + "." +
elapsed.Milliseconds.ToString("000");
txtDecompressElias.Text =
hasilDecompress.ToString();
if (saveFileDialog1.ShowDialog() ==
DialogResult.OK)
{
String filetext = txtDecompressElias.Text;
Microsoft.Office.Interop.Word.Application
oWord = new Microsoft.Office.Interop.Word.Application();
//oWord.Visible = true;
var oDoc = oWord.Documents.Add();
//Insert a paragraph at the beginning of the
document.
var paragraph1 =
oDoc.Content.Paragraphs.Add();
paragraph1.Range.Text = filetext;
oDoc.SaveAs(@saveFileDialog1.FileName);
MessageBox.Show("Penyimpanan
berhasil", saveFileDialog1.FileName);
oWord.Quit();
}
}catch(Exception ex){
MessageBox.Show(ex.ToString());
}
btnReset.Enabled = true;
}
void TxtDecompressEliasTextChanged(object sender, EventArgs e)
{
}
void BtnResetClick(object sender, EventArgs e)
{
textBoxLoadFilePath.Text = "";
txtUkuranFileE.Text = "";
ukuranfile.Text = "";
txtRasio.Text = "";
txtWaktuKompres.Text = "";
txtRedudancyElias.Text = "";
txtWaktuDekompres.Text = "";
textBoxDisplayText.Text = "";
txtHasil.Text = "";
txtDecompressElias.Text = "";
buttonBaca.Enabled = false;
btnCompressEG.Enabled = false;
btnDecompressEG.Enabled = false;
btnReset.Enabled = false;
}
}
}

Universitas Sumatera Utara

70

3. Shannon-Fano.cs
using
using
using
using
using
using
using
using

stem;
Sy
System.Drawing;
System.IO;
System.Dynamic;
System.Windows.Forms;
System.Text;
System.Collections.Generic;
IronPython.Hosting;

namespace Home
{
///
/// Description of Shannon.
///
public partial class Shannon : Form
{
public Shannon()
{
//
// The InitializeComponent() call is required for Windows
Forms designer support.
//
InitializeComponent();
//
// TODO: Add constructor code after the
InitializeComponent() call.
//
}
void ButtonBrowseClick(object sender, EventArgs e)
{
OpenFileDialog dialog = new OpenFileDialog();
dialog.Filter = "Document (MsWord)|*.doc";
dialog.Title = "Open file doc : ";
dialog.RestoreDirectory = true;
if(dialog.ShowDialog() == DialogResult.OK){
string dirName =
System.IO.Path.GetDirectoryName(dialog.FileName);
var fileinfo = new FileInfo(dialog.FileName);
var size= fileinfo.Length;
string drive =
dirName.Split(System.IO.Path.VolumeSeparatorChar)[1];
txtUkuranFileS.Text=size.ToString();
textBoxLoadFilePath.Text =
dirName + "\\" + dialog.SafeFileName.ToString();
}
buttonBaca.Enabled=true;
}
void ButtonBacaClick(object sender, EventArgs e)
{
Microsoft.Office.Interop.Word.Application wordApp = new
Microsoft.Office.Interop.Word.ApplicationClass();
object filenameO = textBoxLoadFilePath.Text.ToString();
object objFalse = false;
object objTrue = true;
object missing = System.Reflection.Missing.Value;
object emptyData = string.Empty;

Universitas Sumatera Utara

71

try{
Microsoft.Office.Interop.Word.Document aDoc
= wordApp.Documents.Open(ref filenameO, ref objFalse, ref objTrue, r
ef missing, ref missing, ref missing, ref missing, ref missing, ref m
issing, ref missing, ref objTrue, ref missing, ref missing, ref missi
ng, ref missing);
aDoc.ActiveWindow.Selection.WholeStory();
aDoc.ActiveWindow.Selection.Copy();
IDataObject data =
System.Windows.Forms.Clipboard.GetDataObject();
String fileText =
data.GetData(System.Windows.Forms.DataFormats.Text).ToString();
System.Windows.Forms.Clipboard.SetDataObject(string.E
mpty);
textBoxDisplayText.Text = fileText;
}
catch(Exception err){
MessageBox.Show(err.Message);
}
finally{
MessageBox.Show("File berhasil dibaca");
}
btnCompressSF.Enabled=true;
}
void BtnCompressSFClick(object sender, EventArgs e)
{
var input = textBoxDisplayText.Text;
try
{
var ipy = Python.CreateRuntime();
dynamic shannonfano =
ipy.UseFile("shannonfano.py");
DateTime startTime = DateTime.Now;
dynamic CR = shannonfano.processSF(input);
dynamic RedudancyData =
shannonfano.processSF1(input);
dynamic hasilCompress =
shannonfano.processSF2(input);
DateTime endTime = DateTime.Now;
TimeSpan elapsed =
endTime.Subtract(startTime);
txtWaktuKompres.Text =
elapsed.Hours.ToString("00") + ":" +
elapsed.Minutes.ToString("00") + ":" + elapsed.Se
conds.ToString("00") + "." +
elapsed.Milliseconds.ToString("000");
txtRedudancyShannon.Text=
RedudancyData.ToString();
txtHasil.Text = hasilCompress.ToString();
txtRasio.Text = CR.ToString();
File.WriteAllText("D:/data.txt", txtHasil.Text);
var fileinfo = new FileInfo("D:/data.txt");

Universitas Sumatera Utara

72

var size= fileinfo.Length;
ukuranfile.Text=size.ToString();
}catch(Exception ex){
MessageBox.Show(ex.ToString());
}
btnDecompressSF.Enabled=true;
}
void BtnDecompressSFClick(object sender, EventArgs e)
{
SaveFileDialog saveFileDialog1 = new SaveFileDialog();
saveFileDialog1.Filter = "Word 1997-2003|*.doc|Word 20072013|*.docx|Rich Text File|*.rtf|All Files (*.*)|*.*";
saveFileDialog1.Title = "";
var input = textBoxDisplayText.Text;
try
{
var ipy = Python.CreateRuntime();
dynamic shannonfano =
ipy.UseFile("shannonfano.py");
DateTime startTime = DateTime.Now;
dynamic hasilDecompress =
shannonfano.processSF3(input);
DateTime endTime = DateTime.Now;
TimeSpan elapsed =
endTime.Subtract(startTime);
txtWaktuDekompres.Text =
elapsed.Hours.ToString("00") + ":" +
elapsed.Minutes.ToString("00") + ":" + elapsed.Se
conds.ToString("00") + "." +
elapsed.Milliseconds.ToString("000");
txtDecompressShannon.Text =
hasilDecompress.ToString();
if (saveFileDialog1.ShowDialog() ==
DialogResult.OK)
{
String filetext = txtDecompressShannon.Text;
Microsoft.Office.Interop.Word.Application
oWord = new Microsoft.Office.Interop.Word.Application();
//oWord.Visible = true;
var oDoc = oWord.Documents.Add();
//Insert a paragraph at the beginning of the
document.
var paragraph1 =
oDoc.Content.Paragraphs.Add();
paragraph1.Range.Text = filetext;
oDoc.SaveAs(@saveFileDialog1.FileName);
MessageBox.Show("Penyimpanan
berhasil", saveFileDialog1.FileName);
oWord.Quit();
}
}catch(Exception ex){

Universitas Sumatera Utara

73

MessageBox.Show(ex.ToString());
}
btnReset.Enabled=true;
}
void BtnResetClick(object sender, EventArgs e)
{
textBoxLoadFilePath.Text = "";
txtUkuranFileS.Text = "";
ukuranfile.Text = "";
txtRasio.Text = "";
txtWaktuKompres.Text = "";
txtRedudancyShannon.Text = "";
txtWaktuDekompres.Text = "";
textBoxDisplayText.Text = "";
txtHasil.Text = "";
txtDecompressShannon.Text = "";
buttonBaca.Enabled = false;
btnCompressSF.Enabled = false;
btnDecompressSF.Enabled = false;
btnReset.Enabled = false;
}
void Label8Click(object sender, EventArgs e)
{
}
}
}

4. Eliasgamma.py
#*- coding: utf-8 -*#title: Elias' Gamma and Shannon-Fano's Algorithm
#purpose: Data Compression
#author: 1.Mohammad Andri Budiman
2.Nurhennida Br Sitepu
#version: 1.3
#date: May 5nd 2014
#time: 18:30
from math import log
#fungsi berikut ini mengembalikan 2 nilai, yaitu:
#(1) list char = karakter apa saja yang ada pada string st
#(2) list freq = berapa frequency masing-masing karakter
def count_freq(st):
char = list(set(st))
freq = []
for i in char:
x = st.count(i)
freq.append(x)
return char, freq
#fungsi berikut ini mengembalikan 2 nilai yaitu:
#(1) list freq yang sudah tersortir descending order
#(2) list char yang sudah tersortir mengikuti urutan freq-nya
def InsertionSort(f, c):
n = len(f)

Universitas Sumatera Utara

74

for i in range(1, n):
for j in range(0, i):
if f[i] > f[j]:
f.insert(j, f.pop(i))
c.insert(j, c.pop(i))
return f, c
#fungsi berikut ini menjumlahkan semua angka yang ada pada list f
def sum(f):
s = 0
for i in f:
s = s + i
return s
#fungsi berikut ini mengembalikan 2 nilai, yaitu:
#(1) difference = beda antara jumlah freq table atas dgn jumlah freq
table bawah
#(2) row = baris tempat pemotongan tabel, dihitung dari bawah
def findrow(f):
difference = sum(f)
row = 1
t = len(f)
for i in range(1, t):
upper = f[0:(t-i)]
lower = f[t - i:]
x = abs(sum(upper) - sum(lower))
if x < difference:
difference = x # difference = beda antara jumlah
freq table atas dgn jumlah freq table bawah
row = i # row = baris tempat pemotongan table
return difference, row
def EliasGamma(st):
if len(st) f[j]:
f.insert(j,
c.insert(j,
return f, c

nilai yaitu:
descending order
mengikuti urutan freq-nya

f.pop(i))
c.pop(i))

#fungsi berikut ini menjumlahkan semua angka yang ada pada list f
def sum(f):
s = 0
for i in f:
s = s + i
return s
#fungsi berikut ini mengembalikan 2 nilai, yaitu:
#(1) difference = beda antara jumlah freq table atas dgn jumlah freq
table bawah
#(2) row = baris tempat pemotongan tabel, dihitung dari bawah
def findrow(f):
difference = sum(f)

Universitas Sumatera Utara

78

row = 1
t = len(f)
for i in range(1, t):
upper = f[0:(t-i)]
lower = f[t - i:]
x = abs(sum(upper) - sum(lower))
if x < difference:
difference = x # difference = beda antara jumlah
freq table atas dgn jumlah freq table bawah
row = i # row = baris tempat pemotongan table
return difference, row
#fungsi berikut ini berfungsi melakukan table splitting secara
rekursif, sekaligus meng-update kode Shannon-Fano
def split(S, F, C, charset, sf):
t = len(S)
if t > 1:
diff, row = findrow(F)
S1 = []
S2 = []
F1 = []
F2 = []
C1 = []
C2 = []
S1 = S[0:t - row]
S2 = S[t - row:]
F1 = F[0:t - row]
F2 = F[t - row:]
for i in range(t):
if i < t - row:
C[i] = str(C[i]) + '0'
else:
C[i] = str(C[i]) + '1'
C1 = C[0:t - row]
C2 = C[t - row:]
if len(S1) == 1:
charset.append(S1[0])
sf.append(C1[0])
if len(S2) == 1:
charset.append(S2[0])
sf.append(C2[0])
split(S1, F1, C1, charset, sf)
split(S2, F2, C2, charset, sf)
#fungsi berikut ini mengembalikan 2 nilai, yaitu:
#(1) charset = character set
#(2) sf = kode Shannon-Fano yang bersesuaian
def ShannonFano(st):
if len(st) f[j]:
f.insert(j, f.pop(i))
c.insert(j, c.pop(i))
return f, c

3.1.4.3 Pseudocode kompresi shannon-fano
Untuk pemberian kode kompresi shannon-fano digunakan konsep belah table dimana
pembelahan tabel dilakukan dengan membandingkan jumlah frekuensi yang terdekat.
Jika karakter berada diatas garis pembagian maka akan mendapatkan simbol 0 dan
jika berada dibawah garis maka akan mendapatkan simbol 1. Proses ini dilakukan
secara rekursif hingga karakter mendapatkan simbol yang berbeda.
ence
differ
← sum(f)
row ← 1
t ← len(f)
for i in range(1, t):
upper ← f[0:(t-i)]
lower ← f[t - i:]
x ← abs(sum(upper) - sum(lower))
if x < difference:
difference ← x
row ← i
t ← len(S)
if t > 1:
diff,
S1 ←
S2 ←
F1 ←
F2 ←
C1 ←
C2 ←
S1 ←
S2 ←
F1 ←
F2 ←
for i

row ← findrow(F)
[]
[]
[]
[]
[]
[]
S[0:t - row]
S[t - row:]
F[0:t - row]
F[t - row:]
in range(t):
if i < t - row:

Universitas Sumatera Utara

26

C[i] ← str(C[i]) + '0'
else:
C[i] ← str(C[i]) + '1'
C1 ← C[0:t - row]
C2 ← C[t - row:]
if len(S1) = 1:
charset.append(S1[0])
sf.append(C1[0])
if len(S2) = 1:
charset.append(S2[0])
sf.append(C2[0])
split(S1, F1, C1, charset, sf)
split(S2, F2, C2, charset, sf)

3.1.4.4 Pseudocode kompresi Elias Gamma Code
Kode elias gamma didapatkan dari jumlah angka 0 yang diletakkan didepan yang
didapat dari nilai tertinggi m dari 2m. Kemudian diikuti dengan angka biner dari nilai
n. Berikut pseudocodenya:
g(n,2))
int(lo
dec ← int(dec)
bin = ''
r ← dec % 2
bin ← str(r) + bin
dec//=2
while(dec != 0):
r ← dec % 2
bin ← str(r) + bin
dec//=2

3.1.4.5 Pseudocode dekompresi
st = ''
bit = ''
t ← len(sb)
pad ← bin2dec(sb[-8:])
sb ← sb[0:t-pad-8]
for i in range(len(sb)):
bit ← bit + sb[i]
if bit in s:
x ← s.index(bit)
y ← c[x]
st ← st + y
bit = ''

3.1.4.6 Pseudocode Perhitungan nilai parameter
char, freq ← count_freq(st)
freq, char ← InsertionSort(freq, char)
c, s ← EliasGamma(st)

Universitas Sumatera Utara

27

for i in range(len(c)):
sb ← string2sb(st, c, s)
uncompressed_bits ← len(st) * 8
compressed_bits ← len(sb)
CR ← (uncompressed_bits * 1.0) / compressed_bits
SS ← (1.0 - 1.0/CR) * 100

3.1.5. Flowchart Sistem
Flowchart merupakan gambar atau bagan yang memperlihatkan urutan dan hubungan
antar proses beserta pernyataannya. Gambaran ini dinyatakan dengan simbol. Dengan
menggambarkan flowchart akan memudahkan kita untuk melakukan pengecekan
bagian-bagian yang terlupakan dalam analisis masalah. Disamping itu kegunaannya
sebagai fasilitas komunikasi antara pemrogram yang bekerja dalam tim suatu proyek
(Zarlis & Handrizal, 2008).
Berikut flowchart diagram yang dapat dilihat pada Gambar 3.4.

Universitas Sumatera Utara

28

Gambar 3.4 Flowchart Sistem

Universitas Sumatera Utara

29

3.2

Perancangan Sistem

Sistem ini dibangun menggunakan bahasa pemrograman C# dan Python. Pembuatan
rancangan sistemnya disesuaikan dengan kebutuhan yang mendukung tahapan
kompresi dan dekompresi data, dimana algoritma yang digunakan adalah Elias
Gamma Code dan Shannon-Fano. Sistem yang telah dirancang terdiri dari 6 form
yaitu form Kompresi-Home, form Kompresi-Elias , form Kompresi-Shannon, form
Kompresi-Help, form Kompresi-About dan form exit.

3.2.1. Kompresi-Home
Pada form Kompresi-Home dirancang menjadi form utama dalam bentuk Multiple
Document Interface (MDI) sehingga semua form yang dibuka berada didalam form
ini. Dalam form ini berisi mengenai keterangan judul, nama pembuat sistem dan
jurusan.
Tampilan form Kompresi-Home ditunjukkan pada Gambar 3.5
X

Kompresi – [Home]
Beranda

Algoritma
Algoritma Bantuan

Tentang

Keluar

PERBANDINGAN ALGORITMA ELIAS GAMMA CODE DENGAN
SHANNON-FANO PADA KOMPRESI FILE TEKS

NURHENNIDA BR SITEPU
101401097

PROGRAM STUDI S1 ILMU KOMPUTER
FAKULTAS ILMU KOMPUTER DAN TEKNOLOGI INFORMASI
UNIVERSITAS SUMATERA UTARA
MEDAN
2014

Gambar 3.5 Perancangan Form Kompresi-Home

Universitas Sumatera Utara

30

3.2.2. Kompresi-Elias
Form ini akan ditampilkan setelah user memilih menu Algoritma terlebih dahulu
kemudian memilih sub menu Elias Gamma Code. Pada form ini user dapat memulai
mengkompresi dan mendekompresi file.
Tampilan form Kompresi-Elias ditunjukkan pada Gambar 3.6.

Gambar 3.6 Perancangan Form Kompresi – Elias
Adapun komponen yang ada didalam form ini berdasarkan Gambar 3.6 adalah
sebagai berikut :
1. Button (Cari file) digunakan untuk mengambil data .txt .
2. TextBox digunakan untuk menampilkan nama file.
3. TextBox digunakan untuk menampilkan ukuran file.
4. Button (Baca File) digunakan untuk membaca isi file .txt.
5. TextBox digunakan untuk menampilkan isi file .txt.
6. Button (Kompresi) digunakan untuk menampilkan kode kompresi, ukuran file
kompresi, Rasio kompresi, waktu kompresi dan Redudancy data
7. TextBox digunakan untuk menampilkan kode hasil kompresi.
8. TextBox digunakan untuk menampilkan ukuran file kompresi.
9. TextBox digunakan untuk menampilkan Rasio kompresi.

Universitas Sumatera Utara

31

10. TextBox digunakan untuk menampilkan waktu kompresi.
11. TextBox digunakan untuk menampilkan Redudancy data.
12. Button (Dekompresi) digunakan untuk menampilkan hasil dekompresi dan
waktu dekompresi.
13. TextBox digunakan untuk menampilkan hasil dekompresi.
14. TextBox digunakan untuk menampilkan waktu dekompresi.
15. Button (Kosongkan) digunakan untuk mengosongkan seluruh textbox dan
menjadikan tampilan seperti form semula.

3.2.3. Kompresi-Shannon
Form ini akan ditampilkan setelah user memilih menu Algoritma terlebih dahulu
kemudian memilih sub menu Shannon Fano. Pada form ini user dapat memulai
mengkompresi dan mendekompresi file.
Tampilan form Kompresi-Shannon ditunjukkan pada Gambar 3.7

Gambar 3.7 Perancangan Form Kompresi – Shannon
Adapun komponen yang ada didalam form ini berdasarkan Gambar 3.7 adalah
sebagai berikut :
1. Button (Cari file) digunakan untuk mengambil data .txt .

Universitas Sumatera Utara

32

2. TextBox digunakan untuk menampilkan nama file.
3. TextBox digunakan untuk menampilkan ukuran file.
4. Button (Baca File) digunakan untuk membaca isi file .txt.
5. TextBox digunakan untuk menampilkan isi file .txt.
6. Button (Kompresi) digunakan untuk menampilkan kode kompresi, ukuran file
kompresi, Rasio kompresi, waktu kompresi dan Redudancy data
7. TextBox digunakan untuk menampilkan kode hasil kompresi.
8. TextBox digunakan untuk menampilkan ukuran file kompresi.
9. TextBox digunakan untuk menampilkan Rasio kompresi.
10. TextBox digunakan untuk menampilkan waktu kompresi.
11. TextBox digunakan untuk menampilkan Redudancy data.
12. Button (Dekompresi) digunakan untuk menampilkan hasil dekompresi dan
waktu dekompresi.
13. TextBox digunakan untuk menampilkan hasil dekompresi.
14. TextBox digunakan untuk menampilkan waktu dekompresi.
15. Button (Kosongkan) digunakan untuk mengosongkan seluruh textbox dan
menjadikan tampilan seperti form semula.

3.2.4. Kompresi-Help
Form ini berisi tentang bantuan sistem yang jika user kebingungan menggunakan
sistem, dapat membaca bantuan sehingga dengan mudah dapat memahami
penggunaan sistem ini.
Tampilan form Kompresi-Help ditunjukkan pada Gambar 3.8

Universitas Sumatera Utara

33

Gambar 3.8 Perancangan Form Kompresi – Shannon

3.2.5. Kompresi-About

Form ini berisi tentang informasi sistem dan data pembuat sistem. Dapat dilihat pada
tampilan form pada Gambar 3.9.

Gambar 3.9 Perancangan Form Kompresi – About

Universitas Sumatera Utara

34

3.2.6. Kompresi-Exit
Form Exit tidak ada yang ditampilkan karena berfungsi untuk menutup semua form
yang telah dibuka. Fungsi Exit berguna untuk semua form karena menggunakan
menustrip.

Universitas Sumatera Utara

BAB 4
IMPLEMENTASI DAN PENGUJ IAN SISTEM

4.1

Implementasi Sistem

Implementasi sistem adalah tahap lanjutan dari tahap perancangan. Sistem yang
dibangun menggunakan bahasa C# dan Python. Terdiri dari 6 form yaitu form
Kompresi-Home, form Kompresi-Elias , form Kompresi-Shannon, form KompresiHelp, form Kompresi-About dan form exit.
4.1.1. Form kompresi-home
Pada saat sistem dijalankan maka akan tampil form kompresi-Home yang
menampilkan keterangan judul sistem yang dibuat. Sistem ini menggunakan
menustrip dimana setiap form akan memiliki tampilan atas yang sama dan akan saling
menutupi form yang telah terbuka karena sistem menggunakan konsep MDI. Dalam
hal ini untuk menampilkan kembali form Kompresi-Home cukup menekan tombol
beranda pada menu di sistem. Tampilan halaman beranda dapat dilihat pada Gambar
4.1.

Universitas Sumatera Utara

36

Gambar 4.1. Tampilan Form Kompresi-Home (Beranda)

4.1.2. Form kompresi-elias
Form Kompresi-Elias akan muncul jika pengguna memilih menu algoritma kemudian
memilih submenu Elias Gamma Code. Form ini berguna untuk mengaplikasikan
algoritma Elias Gamma Code. Pada form ini terdapat beberapa tombol antara lain
adalah cari file, baca file, kompresi, dekompresi dan kosongkan.
Fungsi tombol cari file adalah menampilkan nama file dan ukuran file. Fungsi
tombol baca file adalah menampilkan isi file .txt yang akan dikompresi. Fungsi tombol
kompresi adalah menampilkan hasil kompresi menggunakan algoritma Elias Gamma
Code berbentuk kode biner, ukuran file kompresi, rasio kompresi, waktu kompresi,
dan redudancy data. Fungsi tombol dekompresi adalah menampilkan kembali hasil
dekompresi dan menyimpan dalam file baru .doc. Fungsi tombol kosongkan adalah
untuk menghapus isi seluruh textbox yang telah terisi. Agar lebih jelas tampilan form
kompresi-Elias dapat dilihat pada Gambar 4.2.

Universitas Sumatera Utara

37

Gambar 4.2. Tampilan Form Kompresi-Elias (submenu Elias Gamma Code)
4.1.3. Form kompresi-shannon
Form kompresi-shannon isinya sama persis dengan form kompresi-Elias, hanya saja
algoritma yang digunakan dalam form ini adalah algoritma Shannon-Fano. From ini
akan ditampilkan jika menekan tombol algoritma dan submenu shannon-fano. Agar
lebih jelas tampilan form Kompresi-Shannon dapat dilihat pada Gambar 4.3.

Universitas Sumatera Utara

38

Gambar 4.3. Tampilan Form Kompresi-Shannon (submenu Shannon-Fano)

4.1.4. Form kompresi-help
Form Kompresi-Help akan tampil jika pengguna memilih menu bantuan, isi dari form
ini sendiri adalah mengenai cara kerja sistem. Jika pengguna kebingungan
menggunakan aplikasi ini, cukup hanya membaca petunjuk yang ada di form ini.
Tampilan form Kompresi-Help dapat dilihat pada Gambar 4.4.

Universitas Sumatera Utara

39

Gambar 4.4. Tampilan Form Kompresi-Help (Bantuan)

4.1.5. Form kompresi-about
Form Kompresi-About akan muncul jika pengguna memilih menu tentang, hal yang
ditampilkan pada form ini adalah mengenai judul sistem dan dinformasi tentang
programmer.
Tampilan form Kompresi-About dapat dilihat pada Gambar 4.5

Universitas Sumatera Utara

40

Gambar 4.5. Tampilan Form Kompresi-About (Tentang)
4.1.6. Form exit
Form ini tidak ditampilkan karena berfungsi untuk menutup seluruh aplikasi yang
telah dibuka sebelumnya. Form ini akan bekerja jika memilih menu keluar.

4.2

Pengujian Sistem

Pengujian sistem perbandingan algoritma elias gamma code dengan shannon-fano
untuk kompresi file teks dilakukan untuk mengetahui algoritma mana yang lebih baik
digunakan untuk mengurangi ukuran file teks berekstensi .txt. Pengujian akan
membahas ukuran file, waktu kompresi, rasio kompresi, redudancy data dan waktu
dekompresi untuk masing-masing algoritma yaitu Elias Gamma Code dan algoritma
Shannon-Fano pada form yang berbeda.

4.2.1. Pengujian algoritma elias gamma code
Hal pertama yang harus dilakukan oleh pengguna adalah mencari file .txt, kemudian
menampilkan isi file ke tampilan sistem. Pada saat tombol cari file ditekan oleh
pengguna maka keterangan untuk nama file dan ukuran file ditampilkan. Sementara

Universitas Sumatera Utara

41

jika ditekan tombol baca file, maka isi file .txt akan ditampilkan ke lembar kerja
sistem untuk diolah. Kemudian pada form ini jika file berhasil dibaca maka akan
ditampilkan messagebox yang berisi pernyataan file berhasil dibaca.
Agar lebih jelas dapat dilihat pada Gambar 4.6.

Gambar 4.6. Tampilan Isi File .txt Berhasil dibaca
Sistem ini telah diatur untuk penggunaan tombolnya jika suatu tombol belum
menyelesaikan tugasnya maka tombol yang lain tidak diaktifkan. Setelah file .txt
berhasil dibaca dan ditampilkan maka hal yang akan dilakukan adalah melakukan
kompresi menggunakan algoritma Elias Gamma Code.
Hasil kompresi akan ditampilkan pada textbox yang ada dibawah tombol
kompresi yang berupa kode biner. Sistem telah menyimpan kode hasil kompresi
dalam bentuk file berekstensi .txt tetapi tidak menampilkan dan tidak membuat
pemberitahuan dalam bentuk messagebox.
Saat menekan tombol kompresi maka nilai ukuran file kompresi, rasio
kompresi, waktu kompresi dan redudancy data akan ditampilkan. Selain itu tombol
dekompresi juga diaktifkan setelah tugas dari tombol kompresi selesai. Agar lebih
jelas dapat dilihat pada Gambar 4.7.

Universitas Sumatera Utara

42

Gambar 4.7. Tampilan Setelah Memilih Tombol Kompresi
Pada sistem ini, selain kompresi juga membahas mengenai dekompresi
sehingga kode yang telah dibentuk dapat dikembalikan ke bentuk semula sehingga
pengguna masih bisa membaca file yang telah dikompresi.
Pada tahapan dekompresi, jika proses telah selesai sistem akan memberikan
suatu tampilan untuk memasukkan nama file sehingga pengguna dapat langsung
mengeditnya kembali dalam format .doc. Agar lebih jelas tampilan dekompresi dapat
dilihat pada Gambar 4.8.

Universitas Sumatera Utara

43

Gambar 4.8. Tampilan Setelah Memilih Tombol Dekompresi
Setelah memasukkan nama file yang diinginkan dan menekan tombol save maka akan
muncul messagebox yang menyatakan penyimpanan berhasil dapat dilihat pada
Gambar 4.9.

Gambar 4.9. Tampilan File Berhasil Disimpan

Universitas Sumatera Utara

44

Setelah ditekan tombol OK maka akan mengaktifkan tombol kosongkan yang
berfungsi untuk mengosongkan semua textbox yang telah terisi data file yang telah
diolah. Seperti pada gambar 4.10. dimana tombol kosongkan diaktifkan dan pada
Gambar 4.11 saat tombol kosongkan ditekan.

Gambar 4.10. Tampilan Tombol Kosongkan Aktif

Gambar 4.11. Tampilan Saat Tombol Kosongkan Ditekan

Universitas Sumatera Utara

45

4.2.2. Pengujian algoritma shannon-fano
Tampilan untuk algoritma Shannon-Fano dan Elias Gamma Code sama persis tetapi
berada di form yang berbeda. Hal yang membedakan adalah kode yang dihasilkan
karena algoritma yang digunakan juga berbeda.

4.2.3. Isi file pengujian
Isi file pengujian disajikan agar lebih memudahkan dalam menganalisis data,
berikut ini pada Tabel 4.1 adalah isi file yang akan diuji untuk 100 karakter yang
dimulai dari variasi 1 karakter hingga variasi 26 karakter. Pada Tabel 4.2 isi file
pengujian yang dibuat adalah perulangan karakter dimana jumlah ada 36 karakter dan
diulang hingga lima kali perulangan dengan variasi 36 karakter.

Tabel 4.1. Isi File .txt 100 Karakter dengan Penambahan 1 Variasi Karakter
Nama
File

Frekuensi
Karakter

1.t xt

100

2.t xt

100

3.t xt

100

4.t xt

100

5.t xt

100

6.t xt

100

7.t xt

100

8.t xt

100

9.t xt

100

10.t xt

100

Variasi
Karakter

Isi File

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbb
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbcccccccccccccccccccccccccccccc
aaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbb
bbbbbcccccccccccccccccccccdddddddddddddddddddd
aaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbcccccccccccccc
ccccccddddddddddddddddddddeeeeeeeeeeeeeeeeeeee
aaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbcccccccccccccccccc
ddddddddddddddddddeeeeeeeeeeeeeeeeeef ff f ff f f ff
aaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbccccccccccccccccddddd
dddddddddddeeeeeeeeeeeeeeeeff f ff f ff gggggggggggg
aaaaaaaaaaaaaabbbbbbbbbbbbbbbccccccccccccccddddddddd
ddddddeeeeeeeeeeeeeef ff f f ff ggggggggggghhhhhhhhhh
aaaaaaaaaaaabbbbbbbbbbbbbccccccccccccdddddddddddddde
eeeeeeeeeeeef ff f f ff gggggggggghhhhhhhhhiiiiiiiiii
aaaaaaaaaabbbbbbbbbbbbccccccccccdddddddddddddeeeeee
eeeeeff f ff f gggggggggghhhhhhhiiiiiiiiiijjjjj jjjj jj

1
2
3
4
5
6
7
8
9
10

Universitas Sumatera Utara

46

Nama
File

Frekuensi
Karakter

11.t xt

100

12.t xt

100

13.t xt

100

14.t xt

100

15.t xt

100

16.t xt

100

17.t xt

100

18.t xt

100

19.t xt

100

20.t xt

100

21.t xt

100

22.t xt

100

23.t xt

100

24.t xt

100

25.t xt

100

26.t xt

100

Variasi
Karakter

Isi File
aaaaaaaaabbbbbbbbbbbcccccccccddddddddddddeeeeeeeeee
f ff f f ggggggggghhhhhhiiiiiiiiijjjjj jjjj jkkkkkkkkkk
aaaaaaaabbbbbbbbbbccccccccdddddddddddeeeeeeeeeff f fgg
ggggggghhhhhhiiiiiiiijjjj jjjj jkkkkkkkkkkllllllll
aaaaaaaabbbbbbbbbbccccccdddddddddddeeeeeeeeef f ff gggg
ggghhhhhhiiiiiiiijjj jjjj jjkkkkkkkklllllllmm mmmm m
aaaaaaaabbbbbbbbccccccdddddddddeeeeeeeeef f ff gggggggh
hhhhhiiiiiiiijj jjjj jjkkkkkkkkllllllmmmm mmmnnnnnn
aaaaaaaabbbbbbbbccccccdddddddddeeeeeeeeef f ff gggggggh
hhhhhiiiiiiiijj jjjj jjkkkkkkkllllllmm mmmmnnnnnooo
aaaabbbbbbbcccccddddddddeeeeeeeef ff ggggggghhhhhiiiiiiij
jjjj jjjkkkkkk