Perbandingan Kinerja Algoritma Kompresi Inverted Elias Gamma dan Capocelli Code Pada File Teks

(1)

LAMPIRAN LISTING PROGRAM

1. Form Home 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.Runtime.InteropServices; namespace WindowsFormsApplication1 {

public partial class Form1 : Form {

public Form1() {

InitializeComponent(); }

private void Form1_Load(object sender, EventArgs e) {

}

private void compressToolStripMenuItem_Click_1(object sender, EventArgs e) {


(2)

// Set the Parent Form of the Child window. newMDIChild.MdiParent = this;

// Display the new form. newMDIChild.Show(); }

private void exitToolStripMenuItem_Click(object sender, EventArgs e) {

Form5 newMDIChild = new Form5(); newMDIChild.MdiParent = this; newMDIChild.Show();

}

private void decompressToolStripMenuItem_Click(object sender, EventArgs e) {

Form3 newMDIChild = new Form3(); newMDIChild.MdiParent = this; newMDIChild.Show();

}

private void aboutMeToolStripMenuItem_Click(object sender, EventArgs e) {

Form4 newMDIChild = new Form4(); newMDIChild.MdiParent = this; newMDIChild.Show();

}

private void helpToolStripMenuItem_Click(object sender, EventArgs e) {

System.Windows.Forms.Application.Exit(); }


(3)

} }

2. Form Kompresi

using System; using System.IO;

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.Runtime.InteropServices.ComTypes;

namespace WindowsFormsApplication1 {

public partial class Form2 : Form {

public string kalimat; public string nwkalimat; public Form2()

{

InitializeComponent();

this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; }


(4)

private void Form2_Load(object sender, EventArgs e) {

}

private void button1_Click(object sender, EventArgs e) {

DialogResult result = openFileDialog1.ShowDialog(); // Show the dialog. if (result == DialogResult.OK) // Test result.

{

string file = openFileDialog1.FileName; textBox1.Text = file;

}

}

public static String readingfiledoc(String kode) {

Microsoft.Office.Interop.Word.Application word = new Microsoft.Office.Interop.Word.Application();

object miss = System.Reflection.Missing.Value;

Microsoft.Office.Interop.Word.Document docs = word.Documents.Open(ref path, ref miss, ref readOnly, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss);

string totaltext = "";

for (int i = 0; i < docs.Paragraphs.Count; i++) {

totaltext += " \r\n " + docs.Paragraphs[i + 1].Range.Text.ToString(); }

string text = totaltext; return text;


(5)

docs.Close(); word.Quit(); }

private void button2_Click(object sender, EventArgs e) {

string target = textBox1.Text;

string extension = Path.GetExtension(target); if (extension == ".docx" | extension == ".txt") {

string namafolder=Path.GetDirectoryName(target);

string namafile = Path.GetFileNameWithoutExtension(target);

//calling Run inverted elias gamma function on inverted elias gamma clas invertedeliasgamma.runInvertedEliasGamma(target, namafolder, namafile);

//attach process result to inverted elias gamma text richTextBox1.Text =invertedeliasgamma.kalimatieg;

//calling Run Capocelli function on capocelli class

capocelli.RunCapocelliCompression(target, namafolder, namafile);

//attach process result to capocelli text nwkalimat = capocelli.kalimatcpl; richTextBox3.Text = nwkalimat;

} else {

string msg = "Your file extension are not txt or docx !!!"; kotakpesan(msg);


(6)

}

private void kotakpesan(string msg) {

string message = msg; string caption = "Warning";

MessageBoxButtons buttons = MessageBoxButtons.OK; DialogResult result;

// Displays the MessageBox.

result = MessageBox.Show(message, caption, buttons);

if (result == System.Windows.Forms.DialogResult.OK) {

// Closes the parent form. // this.Close();

} }

}

public class invertedeliasgamma{ private static int[] fr;

private static String cs;

public static String kalimatieg; private static String[] egc; private static String[] iegc;

public static String GetCharSet(String st) {

{

char c = st[i];


(7)

s.Append(c); }

return s.ToString(); }

private static int CountChar(String s, char ch) {

return s.Split(ch).Length - 1; }

public static int[] CountFreq(String st) {

String charset = GetCharSet(st); int n = charset.Length;

int[] freq = new int[n]; for (int i = 0; i < n; i++)

freq[i] = CountChar(st, charset[i]); return freq;

}

public static void InsertionSort(int[] freq, String charset) {

fr = freq; cs = charset;

int n = charset.Length;

StringBuilder sb = new StringBuilder(charset); for (int i = 1; i < n; i++)

for (int j = 0; j < i; j++) if (fr[i] > fr[j]) {

char sbtemp = sb[i]; sb[i] = sb[j];


(8)

sb[j] = sbtemp; }

cs = sb.ToString(); }

public static String Reverse(String sb) {

char[] charArray = sb.ToCharArray(); Array.Reverse(charArray);

return new String(charArray); }

public static int BinToDec(String bin) {

StringBuilder sb = new StringBuilder(Reverse(bin)); int n = 1;

int dec = 0;

for (int i = 0; i < sb.Length; i++) {

dec = dec + (int)(Char.GetNumericValue(sb[i])) * n; n = n * 2;

}

return dec; }

public static String DecToBin(int dec) {

StringBuilder bin = new StringBuilder(); int r = dec % 2;

bin.Insert(0, r); dec = dec / 2; while (dec != 0) {


(9)

r = dec % 2; bin.Insert(0, r); dec = dec / 2; }

return bin.ToString(); }

// converts strings into stringbits

public static String StringToStb(String st, String c, String[] s) {

{

String z = Char.ToString(st[i]); int k = c.IndexOf(z);

stb.Append(s[k]); }

int x = stb.Length % 8; int pad = 0;

if (x != 0) {

pad = 8 - x;

for (int i = 0; i < pad; i++) stb.Append("0"); }

String d = DecToBin(pad); int y = 8 - d.Length; for (int i = 0; i < y; i++) stb.Append("0"); stb.Append(d); return stb.ToString(); }


(10)

{

for (int i = 0; i < t; i++) sb.Append(s); return sb;

}

private static void InvertedEliasGamma(String st) {

int[] freq = CountFreq(st); String charset = GetCharSet(st); int t = charset.Length;

InsertionSort(freq, charset); freq = fr;

charset = cs;

egc = new String[t]; iegc = new String[t]; int c = 0;

int ic = 0;

for (int n = 1; n < t + 1; n++) {

String b = DecToBin(n); int M = b.Length;

StringBuilder u = new StringBuilder(); u = MultiAppend(u, "0", M - 1); u.Append("1");

StringBuilder s1 = new StringBuilder(); for (int j = 0; j < M; j++)

{

s1.Append(b[j]); s1.Append(u[j]); }

String s2 = s1.ToString();


(11)

egc[c] = s; c++;

StringBuilder s3 = new StringBuilder(); for (int j = 0; j < s.Length; j++)

{

if (s[j] == '0') s3.Append("1"); else

s3.Append("0"); }

iegc[ic] = s3.ToString(); ic++;

} }

public static void runInvertedEliasGamma(string target, string folder, string nama){

string content=Form2.readingfiledoc(target); InvertedEliasGamma(content);

String stb = StringToStb(content, cs, iegc); int uncompressed_bits = target.Length * 8; int compressed_bits = stb.Length;

double CR = (uncompressed_bits * 1.0) / compressed_bits; double SS = (1.0 - 1.0 / CR) * 100;

kalimatieg = "String = " + content.Length + "\n" + "Char = " + cs + "\n" + "Compressed_bits = " + compressed_bits + "\n" + "Uncompressed_bits = " + uncompressed_bits + "\n" + "Compression Ratio = " + CR + " : 1" + "\n" + "Space Savings = " + SS + " %" + "\n Compressi Success 100%";

string text = stb;

string path = folder + "/"+nama+".ieg"; System.IO.File.WriteAllText(path, text);


(12)

} }

//end inverted elias gamma class

public class capocelli { private static int[] vr; private static String ass; public static String kalimatcpl; private static String[] vc;

private static String GetCharSet(String st) {

StringBuilder s = new StringBuilder(); int n = st.Length;

for (int i = 0; i < n; i++) {

char c = st[i];

if (s.ToString().IndexOf(c) == -1) s.Append(c);

}

return s.ToString(); }

private static int CountChar(String s, char ch) {

return s.Split(ch).Length - 1; }

private static int[] Countvreq(String st) {

String charset = GetCharSet(st); int n = charset.Length;


(13)

for (int i = 0; i < n; i++)

vreq[i] = CountChar(st, charset[i]); return vreq;

}

private static void InsertionSort(int[] vreq, String charset) {

vr = vreq; ass = charset;

int n = charset.Length;

StringBuilder sb = new StringBuilder(charset); for (int i = 1; i < n; i++)

for (int j = 0; j < i; j++) if (vr[i] > vr[j]) {

int vrtemp = vr[i]; vr[i] = vr[j]; vr[j] = vrtemp; char sbtemp = sb[i]; sb[i] = sb[j];

sb[j] = sbtemp; }

ass = sb.ToString(); }

public static String Reverse(String sb) {

char[] charArray = sb.ToCharArray(); Array.Reverse(charArray);

return new String(charArray); }


(14)

{

StringBuilder bin = new StringBuilder(); int r = dec % 2;

bin.Insert(0, r); dec = dec / 2; while (dec != 0) {

r = dec % 2; bin.Insert(0, r); dec = dec / 2; }

return bin.ToString(); }

private static int BinToDec(String bin) {

StringBuilder sb = new StringBuilder(Reverse(bin)); int n = 1;

int dec = 0;

for (int i = 0; i < sb.Length; i++) {

dec = dec + (int)(Char.GetNumericValue(sb[i])) * n; n = n * 2;

}

return dec; }

// converts strings into stringbits

public static String StringToStb(String st, String c, String[] s) {

StringBuilder stb = new StringBuilder(); for (int i = 0; i < st.Length; i++)


(15)

{

String z = Char.ToString(st[i]); int k = c.IndexOf(z);

stb.Append(s[k]); }

int x = stb.Length % 8; int pad = 0;

if (x != 0) {

pad = 8 - x;

for (int i = 0; i < pad; i++) stb.Append("0"); }

String d = DecToBin(pad); int y = 8 - d.Length; for (int i = 0; i < y; i++) stb.Append("0"); stb.Append(d); return stb.ToString(); }

private static StringBuilder Pad(String bin, int bit) {

StringBuilder sb = new StringBuilder(); for (int i = 0; i < bit - bin.Length; i++) sb.Append("0");

sb.Append(bin); return sb; }

private static void Capocelli(String st, int r) {


(16)

int MAX = 20;

String charset = GetCharSet(st); int t = charset.Length;

StringBuilder suffix = new StringBuilder(); suffix.Append("0");

for (int i = 0; i < r; i++) suffix.Append("1");

String[] cc = new String[(int)Math.Pow(2, MAX) + 1]; cc[0] = suffix.ToString();

int prefix_length = 1; int count = 1;

while (true) {

for (int i = 0; i < (int)Math.Pow(2, prefix_length); i++) {

StringBuilder prefix = Pad(DecToBin(i), prefix_length); if ((prefix.ToString()).Contains(suffix.ToString()) == false) cc[count++] = (prefix.Append(suffix)).ToString(); }

prefix_length += 1; if (count > t) break; }

vc = new String[t]; for (int i = 0; i < t; i++) vc[i] = cc[i];

}

public static void RunCapocelliCompression(string target, string folder, string nama)

{


(17)

string content=Form2.readingfiledoc(target); int[] vreq =Countvreq(content);

String charset = GetCharSet(content); int t = charset.Length;

InsertionSort(vreq, charset); Capocelli(content, r);

String stb = StringToStb(content, ass, vc); int uncompressed_bits = content.Length * 8; int compressed_bits = stb.Length;

double CR = (uncompressed_bits * 1.0) / compressed_bits; double SS = (1.0 - 1.0 / CR) * 100;

kalimatcpl = "String = " + content.Length + "\n" + "Char = " + ass + "\n" + "R =" + r + "\n" + "Compressed_bits = " + compressed_bits + "\n" +

"Uncompressed_bits = " + uncompressed_bits + "\n" + "Compression Ratio = " + CR + " : 1" + "\n" + "Space Savings = " + SS + " %" + "\n Compressi Success 100%"; string text = stb;

string path = folder + "/"+ nama +".cpl"; System.IO.File.WriteAllText(path, text);

}

}

}

3. Form Uncompresi

using System; using System.IO;


(18)

using System.ComponentModel; using System.Data;

using System.Drawing; using System.Linq; using System.Text;

using System.Windows.Forms;

namespace WindowsFormsApplication1 {

public partial class Form3 : Form {

public Form3() {

InitializeComponent();

this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;

}

private void Form3_Load(object sender, EventArgs e) {

}

private void button1_Click(object sender, EventArgs e) {

DialogResult result = openFileDialog1.ShowDialog(); // Show the dialog. if (result == DialogResult.OK) // Test result.

{

string file = openFileDialog1.FileName; textBox1.Text = file;


(19)

} }

public static String readingfiledoc(String kode) {

Microsoft.Office.Interop.Word.Application word = new Microsoft.Office.Interop.Word.Application();

object miss = System.Reflection.Missing.Value; object path = kode;

object readOnly = true; object visible = false;

Microsoft.Office.Interop.Word.Document docs = word.Documents.Open(ref path, ref miss, ref readOnly, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss);

string totaltext = "";

for (int i = 0; i < docs.Paragraphs.Count; i++) {

totaltext += " \r\n " + docs.Paragraphs[i + 1].Range.Text.ToString(); }

string text = totaltext; return text;

docs.Close(); word.Quit(); }

private void button2_Click(object sender, EventArgs e) {

string target = textBox1.Text;


(20)

if (extension == ".cpl") {

string namafolder = Path.GetDirectoryName(target);

string namafile = Path.GetFileNameWithoutExtension(target); string target1= namafolder+"/"+namafile+".docx";

//calling Run inverted elias gamma function on inverted elias gamma clas CapocelliDecompression.RunDecompressionCpl(target,target1, namafolder, namafile);

//attach process result to inverted elias gamma text richTextBox2.Text = CapocelliDecompression.kalimat; richTextBox1.Text = CapocelliDecompression.klm;

}

else if (extension == ".ieg") {

string namafolder = Path.GetDirectoryName(target);

string namafile = Path.GetFileNameWithoutExtension(target); string target1 = namafolder + "/" + namafile + ".docx";

//calling Run inverted elias gamma function on inverted elias gamma clas IegDecompression.RunDecompressionIeg(target, target1, namafolder, namafile);

//attach process result to inverted elias gamma text richTextBox2.Text = IegDecompression.kalimat;

richTextBox1.Text = IegDecompression.klm; }

else {

string msg = "Your file extension are not ieg or cpl !!!"; kotakpesan(msg);

} }


(21)

private void kotakpesan(string msg) {

string message = msg; string caption = "Warning";

MessageBoxButtons buttons = MessageBoxButtons.OK; DialogResult result;

// Displays the MessageBox.

result = MessageBox.Show(message, caption, buttons);

if (result == System.Windows.Forms.DialogResult.OK) {

// Closes the parent form. // this.Close();

} } }

public class CapocelliDecompression {

private static int[] vr; private static String ass; public static String klm; public static String kalimat; private static String[] vc;

private static String GetCharSet(String st) {


(22)

int n = st.Length; for (int i = 0; i < n; i++) {

char c = st[i];

if (s.ToString().IndexOf(c) == -1) s.Append(c);

}

return s.ToString(); }

private static int CountChar(String s, char ch) {

return s.Split(ch).Length - 1; }

private static int[] Countvreq(String st) {

String charset = GetCharSet(st); int n = charset.Length;

int[] vreq = new int[n]; for (int i = 0; i < n; i++)

vreq[i] = CountChar(st, charset[i]); return vreq;

}

private static void InsertionSort(int[] vreq, String charset) {

vr = vreq; ass = charset;

int n = charset.Length;

StringBuilder sb = new StringBuilder(charset); for (int i = 1; i < n; i++)


(23)

if (vr[i] > vr[j]) {

int vrtemp = vr[i]; vr[i] = vr[j]; vr[j] = vrtemp; char sbtemp = sb[i]; sb[i] = sb[j];

sb[j] = sbtemp; }

ass = sb.ToString(); }

public static String Reverse(String sb) {

char[] charArray = sb.ToCharArray(); Array.Reverse(charArray);

return new String(charArray); }

private static String DecToBin(int dec) {

StringBuilder bin = new StringBuilder(); int r = dec % 2;

bin.Insert(0, r); dec = dec / 2; while (dec != 0) {

r = dec % 2; bin.Insert(0, r); dec = dec / 2; }

return bin.ToString(); }


(24)

private static int BinToDec(String bin) {

StringBuilder sb = new StringBuilder(Reverse(bin)); int n = 1;

int dec = 0;

for (int i = 0; i < sb.Length; i++) {

dec = dec + (int)(Char.GetNumericValue(sb[i])) * n; n = n * 2;

}

return dec; }

// converts strings into stringbits

private static String StringToStb(String st, String c, String[] s) {

StringBuilder stb = new StringBuilder(); for (int i = 0; i < st.Length; i++)

{

String z = Char.ToString(st[i]); int k = c.IndexOf(z);

stb.Append(s[k]); }

int x = stb.Length % 8; int pad = 0;

if (x != 0) {

pad = 8 - x;

for (int i = 0; i < pad; i++) stb.Append("0"); }


(25)

int y = 8 - d.Length; for (int i = 0; i < y; i++) stb.Append("0"); stb.Append(d); return stb.ToString(); }

private static String Encode(String stb) {

StringBuilder code = new StringBuilder(); for (int i = 0; i < stb.Length; i += 8) {

String x = stb.Substring(i, 8); char y = (char)(BinToDec(x)); code.Append(y);

}

return code.ToString(); }

private static String Decode(String code) {

StringBuilder sb = new StringBuilder(); int t = code.Length;

for (int i = 0; i < t; i++) {

char x = code[i];

StringBuilder y = new StringBuilder(DecToBin((int)x)); if (y.Length < 8)

{

int z = 8 - y.Length % 8; for (int j = 0; j < z; j++) y.Insert(0, "0"); }


(26)

sb.Append(y); }

return sb.ToString(); }

private static String Decompress(String stb, String c, String[] s) {

StringBuilder st = new StringBuilder(); StringBuilder bit = new StringBuilder(); StringBuilder stb2;

int t = stb.Length;

int pad = BinToDec(stb.Substring(t - 8, 8));

stb2 = new StringBuilder(stb.Substring(0, t - pad - 8)); for (int i = 0; i < stb2.Length; i++)

{

bit.Append(stb2[i]);

List<string> list = new List<string>(s); if (list.Contains(bit.ToString()))

{

int x = list.IndexOf(bit.ToString()); st.Append(c[x]);

bit = new StringBuilder(); }

}

return st.ToString(); }

private static StringBuilder Pad(String bin, int bit) {

StringBuilder sb = new StringBuilder(); for (int i = 0; i < bit - bin.Length; i++) sb.Append("0");


(27)

return sb; }

private static void Capocelli(String st, int r) {

int MAX = 20;

String charset = GetCharSet(st); int t = charset.Length;

StringBuilder suffix = new StringBuilder(); suffix.Append("0");

for (int i = 0; i < r; i++) suffix.Append("1");

String[] cc = new String[(int)Math.Pow(2, MAX) + 1]; cc[0] = suffix.ToString();

int prefix_length = 1; int count = 1;

while (true) {

for (int i = 0; i < (int)Math.Pow(2, prefix_length); i++) {

StringBuilder prefix = Pad(DecToBin(i), prefix_length); if ((prefix.ToString()).Contains(suffix.ToString()) == false) cc[count++] = (prefix.Append(suffix)).ToString(); }

prefix_length += 1; if (count > t) break; }

vc = new String[t]; for (int i = 0; i < t; i++) vc[i] = cc[i];


(28)

public static void RunDecompressionCpl(String target,string target1, string folder, string nama)

{

string content = Form2.readingfiledoc(target); string content1 = Form2.readingfiledoc(target1); int[] vreq = Countvreq(content);

String charset = GetCharSet(content); InsertionSort(vreq, charset);

int r = 3;

Capocelli(content1, r);

String stb = StringToStb(content, ass, vc); String code = Encode(stb);

String dc = Decode(code);

String ds = Decompress(dc, ass, vc);

kalimat = "Decompressed_String sama dengan String asli? " + (ds == content) + "\n"+"Decompressi Success 100%";

klm = content1;

string path = folder + "/CplDecompressi.doc"; System.IO.File.WriteAllText(path, klm);

}

}

public class IegDecompression {

private static int[] fr; private static String cs; private static String[] egc;


(29)

private static String[] iegc; public static String klm; public static String kalimat;

private static String GetCharSet(String st) {

}

private static int CountChar(String s, char ch) {

return s.Split(ch).Length - 1; }

private static int[] CountFreq(String st) {

String charset = GetCharSet(st); int n = charset.Length;

int[] freq = new int[n]; for (int i = 0; i < n; i++)

freq[i] = CountChar(st, charset[i]); return freq;

}

private static void InsertionSort(int[] freq, String charset) {

fr = freq; cs = charset;

int n = charset.Length;

StringBuilder sb = new StringBuilder(charset); for (int i = 1; i < n; i++)

for (int j = 0; j < i; j++) if (fr[i] > fr[j])


(30)

{

int frtemp = fr[i]; fr[i] = fr[j]; fr[j] = frtemp; char sbtemp = sb[i]; sb[i] = sb[j];

sb[j] = sbtemp; }

cs = sb.ToString(); }

public static String Reverse(String sb) {

char[] charArray = sb.ToCharArray(); Array.Reverse(charArray);

return new String(charArray); }

private static String DecToBin(int dec) {

StringBuilder bin = new StringBuilder(); int r = dec % 2;

bin.Insert(0, r); dec = dec / 2; while (dec != 0) {

r = dec % 2; bin.Insert(0, r); dec = dec / 2; }

return bin.ToString(); }


(31)

private static int BinToDec(String bin) {

StringBuilder sb = new StringBuilder(Reverse(bin)); int n = 1;

int dec = 0;

for (int i = 0; i < sb.Length; i++) {

dec = dec + (int)(Char.GetNumericValue(sb[i])) * n; n = n * 2;

}

return dec; }

// converts strings into stringbits

private static String StringToStb(String st, String c, String[] s) {

StringBuilder stb = new StringBuilder(); for (int i = 0; i < st.Length; i++)

{

String z = Char.ToString(st[i]); int k = c.IndexOf(z);

stb.Append(s[k]); }

int x = stb.Length % 8; int pad = 0;

if (x != 0) {

pad = 8 - x;

for (int i = 0; i < pad; i++) stb.Append("0"); }

String d = DecToBin(pad); int y = 8 - d.Length;


(32)

for (int i = 0; i < y; i++) stb.Append("0"); stb.Append(d); return stb.ToString(); }

private static String Encode(String stb) {

StringBuilder code = new StringBuilder(); for (int i = 0; i < stb.Length; i += 8) {

String x = stb.Substring(i, 8); char y = (char)(BinToDec(x)); code.Append(y);

}

return code.ToString(); }

private static String Decode(String code) {

StringBuilder sb = new StringBuilder(); int t = code.Length;

for (int i = 0; i < t; i++) {

char x = code[i];

StringBuilder y = new StringBuilder(DecToBin((int)x)); if (y.Length < 8)

{

int z = 8 - y.Length % 8; for (int j = 0; j < z; j++) y.Insert(0, "0"); }


(33)

}

return sb.ToString(); }

private static String Decompress(String stb, String c, String[] s) {

StringBuilder st = new StringBuilder(); StringBuilder bit = new StringBuilder(); StringBuilder stb2;

int t = stb.Length;

int pad = BinToDec(stb.Substring(t - 8, 8));

stb2 = new StringBuilder(stb.Substring(0, t - pad - 8)); for (int i = 0; i < stb2.Length; i++)

{

bit.Append(stb2[i]);

List<string> list = new List<string>(s); if (list.Contains(bit.ToString()))

{

int x = list.IndexOf(bit.ToString()); st.Append(c[x]);

bit = new StringBuilder(); }

}

return st.ToString(); }

private static StringBuilder MultiAppend(StringBuilder sb, String s, int t) {

for (int i = 0; i < t; i++) sb.Append(s); return sb;


(34)

private static void InvertedEliasGamma(String st) {

int[] freq = CountFreq(st); String charset = GetCharSet(st); int t = charset.Length;

InsertionSort(freq, charset); freq = fr;

charset = cs;

egc = new String[t]; iegc = new String[t]; int c = 0;

int ic = 0;

for (int n = 1; n < t + 1; n++) {

String b = DecToBin(n); int M = b.Length;

StringBuilder u = new StringBuilder(); u = MultiAppend(u, "0", M - 1); u.Append("1");

StringBuilder s1 = new StringBuilder(); for (int j = 0; j < M; j++)

{

s1.Append(b[j]); s1.Append(u[j]); }

String s2 = s1.ToString();

String s = s2.Substring(1, s2.Length - 1); egc[c] = s;

c++;

StringBuilder s3 = new StringBuilder(); for (int j = 0; j < s.Length; j++)

{


(35)

s3.Append("1"); else

s3.Append("0"); }

iegc[ic] = s3.ToString(); ic++;

} }

public static void RunDecompressionIeg(String target, string target1, string folder, string nama)

{

string content = Form2.readingfiledoc(target); string content1 = Form2.readingfiledoc(target1); int[] vreq = CountFreq(content);

String charset = GetCharSet(content); InsertionSort(vreq, charset);

InvertedEliasGamma(content);

String stb = StringToStb(content, cs, iegc); String code = Encode(stb);

String dc = Decode(code);

String ds = Decompress(dc, cs, iegc);

kalimat = "Decompressed_String sama dengan String asli? " + (ds == content) + "\n" + "Decompressi Success 100%";

klm = content1;

string path = folder + "/IegDecompressi.doc"; System.IO.File.WriteAllText(path, klm);

} } }


(36)

DAFTAR PUSTAKA

Andika, R. 2014. Implementasi Metode Punctured Elias Codes Pada Kompresi File Text. Skripsi. Universitas Sumatera Utara.

Budiharto, W. 2006. Visual Basic. NET 2005. ANDI: Yogyakarta.

Leong, M. 2006. Dari Programmer untuk Programmer Visual Basic. ANDI : Yogyakarta.

Lubis, W.A. 2015. Penyediaan Data Teks Dengan Algoritma Algamal Dan Algoritma Kompresi Data Dengan Algoritma Elias Gamma Code. Skripsi. Universitas Sumatera Utara.

Napitupulu, N. & Sihombing, N. S. 2010. Struktur Data Dan Algoritma. USU press: Medan.

Purwanto, E. B. 2008. Perancangan & Analisis Algoritma. Graha Ilmu : Serpong Ramadhan, F. 2015. Kompresi Data Teks Menggunakan Algoritma Sequitur. Skripsi.

Program Studi Teknik Informasi, Malang.

Salomon, D. 2004. Data Compression: The Complete Reference. Third Edition. Springer:USA.

Salomon, D. 2007. Variable-length Codes for Data Compression. London: Springer. Sitorus, E.J. 2012. Studi Perbandingan Kompresi Menggunakan Metode Shannon

Fano Dan Unary Coding Pada File Teks. Skripsi. Universitas Sumatera Utara. Siagian, P. 2015. Analisis Perbandingan Kinerja Algoritma Fixed Length Binari

Encoding (FLBE) Dengan Algoritma Sequitur Dalam Kompresi File Teks. Skripsi. Universitas Sumatera Utara.

Solo Technopark IT Division. 2016 . Algoritma Pemograman, Artikel : Solo. Diakses pada tanggal 9 Februari 2016

Tim Litbang MADCOMS. 2004. Referensi Microsoft Visual Basic .NET. MADCOMS. ANDI: Yogyakarta.

Wahana Komputer. 2013. Beralih ke Pemograman Visual Basic. NET. ANDI: Yogyakarta.

Yasin, V. 2012. Rekayasa Perangkat Lunak Berorientasi Objek: Pemodelan, Arsitektur dan Perancangan (Modeling, Architecture and Design). Mitra Wacana Media: Jakarta.


(37)

BAB 3

ANALISIS DAN PERANCANGAN SISTEM

Pada bab ini penulis memaparkan analisis permasalahan yang diangkat yang disajikandengan diagram dan flowchart serta dipaparkan juga perancangan sistem yang akandibangun, baik yang berupa perangkat keras ataupun perangkat lunak, cara melakukan pengujian dan bentuk topologi.

3.1. Analisis Sistem

Analisis sistem ialah proses identifikasi mengenai hal-hal yang dibutuhkan dan harus ada pada sistem, agar sistem tersebut dapat berjalan sesuai dengan tujuan utama. Analisis sistem dapat dilakukan dengan menentukan apa-apa saja yang menjadi input dari sistem, proses apa yang dilakukan sistem dan apa yang menjadi output dari sistem tersebut (Salomon, 2004).Untuk menganalisis sebuah sistem ada beberapa hal yang biasa dilakukan, yaitu sebagai berikut:

3.1.1. Identifikasi Masalah

Analisis masalah merupakan proses mengidentifikasi sebab dan akibat dibangunnya sebuah sistem agar sistem yang akan dibangun tersebut dapat berjalan sebagaimana mestinya sesuai dengan tujuan dari sistem itu. Permasalahan yang diangkat dari penelitian ini adalah untuk mendapatkan algoritma kompresi yang lebih baik diantara algoritma Inverted Elias Gamma Code dan algoritma Capocelli yang akan digunakan untuk memampatkan ukuran file.Dalam penelitian ini yang akan dibahas adalah bagaimana perbandingan algoritma Inverted Elias Gamma Code dan algoritma


(38)

Capocellidalam mengkompresi file teks dengan menggunakan analisis kompresi. Kompresi data menggunakan algoritma Inverted Elias Gamma dan algoritma Capocelli yang dipengaruhi oleh jumlah karakter yang berada dalam file yang akan dimampatkan. Pada penelitian ini file teks yang digunakan yaitu file *.doc.

Diagram Ishikawa adalah diagram yang menunjukkan penyebab – penyebab dari sebuah event yang spesifik. Pemakaian diagram Ishikawa yang paling umum adalah untuk mencegah efek dari suatu sistem serta mengembangkan kualitas produk. Analisa masalah lebih jelas melalui diagram Ishikawa yang dapat dilihat pada

Gambar 3.1. Diagram Ishikawa Analisis Masalah

3.1.2.Analisis Kebutuhan Sistem

Untuk membangun sebuah sistem, perlu dilakukan sebuah tahap analisis kebutuhan sistem. Analisis kebutuhan sistem dapat dikelompokkan menjadi 2 bagian yaitu:


(39)

3.1.2.1.Kebutuhan fungsional

Kebutuhan fungsional adalah fungsi-fungsi yang harus dipenuhi pada aplikasi yang dirancang. Kebutuhan fungsional yang harus dipenuhi aplikasi yang dirancang adalah sebagai berikut:

1. Sistem harus mampu membaca string yang berada dalam text file.

2. Sistemharus mampu melakukan kompresi datamenggunakan algoritma Inverted Elias Gammadan Capocelli secara sempurna.

3. Sistem harus mampu melakukan dekompresi data dengan algoritma Inverted Elias Gammadan Capocellisecara sempurna.

4. Sistem harus mampu menghitung yaitu Ratio of Compression (RC), Compression Ratio (CR), Space Savings (SS), waktu kompresi dan dekompresi data.

5. Sistem harus mampu menyimpan file dekompresi dalam ekstensi file yang berbeda dengan ekstensi file asli.

3.1.2.2. Kebutuhan Non-Fungsional

Kebutuhan non-fungsional adalah kebutuhan yang harus dipenuhi agar aplikasi yang dirancang mendapat umpan-balik yang baik dari pengguna aplikasi. Kebutuhan non-fungsional yang harus dipenuhi aplikasi yang dirancang adalah sebagai berikut (Salomon, 2004):

1. Performa

Setiap tugas harus bisa dilaksanakan sistem secara utuh dengan ukuran data input yang diberikan dalam selang waktu yang tidak terlalu lama.

2. Informasi

Informasi tentang data-data harus bisa disediakan sistem yang akan digunakan pada sistem.


(40)

3. Ekonomi

Penggunaan perangkat keras dan perangkat lunak tanpa harus dikeluarkan biaya tambahan harus bisa bekerja dengan baik oleh sistem.

4. Kontrol

Agar fungsi dan kinerja sistem tetap terjaga dan dapat memberikan hasil yang sesuai dengan keinginan pengguna maka sistem yang telah dibangun harus tetap dikontrol setelah selesai dirancang.

5. Mudah digunakan (User friendly)

Artinya bahwa sistem mudah digunakan oleh user dengan tampilan (interface) yang sederhana dan mudah dimengerti (user friendly).

6. Pelayanan

Bagi pihak-pihak yang ingin mengembangkan sistem,sistem yang telah dirancang bisa dikembangkan ke tingkat yang lebih kompleks lagi.

3.1.3.Analisis Proses

Tujuan dari tahap analisis proses adalah mengetahui tahapan dan cara kerja dari sistem yang digunakan secara spesifik. Analisis proses dilakukan pada tahapan pemodelansistem. Hal ini dilakukan guna mengetahui apa saja yang harus dilakukan oleh sistemsehingga dengan mudah melakukan pemrograman pada sistem yang akan dibangun.

Dalam sistem ini terdapat dua proses utama yaitu proses kompresi dandekompresi dengan menggunakan metode Inverted Elias Gamma dan Capocelli. Secaraumum, proses kompresi maupun dekompresi dari kedua metode ini serupa, hanya sajanilai dari karakter yang akan digunakan yang akan berbeda menurut perhitunganmasing-masing metode. Pada proses kompresi, sistem awalnya membaca string yangterdapat pada file teks dan kemudian membuat tabel karakter dan frekuensi kemunculan karakter itu yang telah diurutkan berdasarkan karakter yang memilikifrekuensi terbesar. Setelah itu sistem membangkitkan kode Inverted Elias GammaatauCapocelli berdasarkan banyaknya karakter pada tabel karakter yang telah


(41)

dibuat.Kemudian sistem melakukan proses kompresi berdasarkan tabel karakter dan tabelkode yang telah dibangkitkan itu. Pada proses dekompresi, awalnya sistem membacafile hasil kompresi. Setelah mendapatkan bit-bit string hasil kompresi dan tabelkarakter dan kodenya, kemudian sistem melakukan proses dekompresi denganmengubah bitstring itu ke dalam bentuk karakter semula berdasarkan tabelkarakter dan tabel kode yang telah dibuat pada proses kompresi.

3.1.3.1.Analisis Proses Kompresi File Teks dengan Metode Inverted Elias Gamma Berikut ini adalah contoh proses kompresi file teks dengan metodeInverted Elias Gamma.Terdapat file teks yang berisikan string “CACA CICI CICIPI CUKA”. Untuk mengukur ukuran String itu di dalam komputer dapat dilihat pada pada

Tabel 3.1 String yang belum di kompresi

n Char ASCII Biner Bit Frek Bit x

Frek

1 C 01000011 8 7 56

2 A 01000001 8 3 24

3 Sp 00100000 8 3 24

4 I 01001001 8 5 40

5 P 01010000 8 1 8

6 U 01010101 8 1 8

7 K 01001011 8 1 8

Jumlah 168

Setelah menghitung data sebelum dikompresi, dari tabel tadi dilakukan kompresi menggunakan Algoritma Inverted Elias Gamma, dengan mengkodekan karakter yang muncul berdasarkan urutan kemunculannya:


(42)

C berdasarkan kode ASCII dikodekan dengan 01000011 A berdasarkan kode ASCII dikodekan dengan 01000001 Spberdasarkan kode ASCII dikodekan dengan 00100000 I berdasarkan kode ASCII dikodekan dengan 01001001 Pberdasarkan kode ASCII dikodekan dengan 01010000 Uberdasarkan kode ASCII dikodekan dengan 01010101 K berdasarkan kode ASCII dikodekan dengan 01001011

Kemudian jumlah bit dari karakter yang dikodekan dikalikan dengan frequency kemunculan dari karakter tersebut:

C yang dikodekan dengan 01000011 mempunyai 8bit dan frequency kemunculan sebanyak 7 kali, maka bit x frequency = 56

A yang dikodekan dengan 01000001 mempunyai 8bit dan frequency kemunculan sebanyak 3 kali, maka bit x frequency = 24

Sp yang dikodekan dengan 00100000 mempunyai bit dan frequency kemunculan sebanyak 3 kali, maka bit x frequency = 24

I yang dikodekan dengan 01001001 mempunyai 8bit dan frequency kemunculan sebanyak 5 kali, maka bit x frequency = 40

P yang dikodekan dengan01010000mempunyai 8bit dan frequency kemunculan sebanyak 1 kali, maka bit x frequency = 8

U yang dikodekan dengan 01010101 mempunyai 8bit dan frequency kemunculan sebanyak 1 kali, maka bit x frequency = 8

K yang dikodekan dengan 01001011mempunyai 8bit dan frequency kemunculan sebanyak 1 kali, maka bit x frequency = 8

Kemudian setiap hasil perkalian dari bit dan frequency dijumlahkan, C + A + Sp + I + P + U + K = 56 + 24 + 24 + 40 + 8 + 8 + 8 = 168, Jadi 168 adalah hasil kompresi menggunakan Algoritma Inverted Elias Gamma. Kemudian kita lakukan proses kompesi pada setiap karakter dengan langkah sebagai berikut:


(43)

1. β(110) = 12 1. β(210) = 102

2. M = 1 2. M = 2

3. U (M) = (M-1) * “0” + “1” 3. U (M) = (M-1) * “0” + “1”= ”01”

4. β(1) = 1 4. β(2) = 10

U(M) = 1 U(M) = 01

x = “11” x = “1001” 5. Elias β(1) = “1” 5. Elias β(2) = “001”

Inverted Elias Gamma = “0” Inverted Elias Gamma = “110”

Maka dapat kita tentukan jumlah bit dari string “CACA CICI CICIPI CUKA” setelah di kompresi menggunakan algoritma InvertedElias Gamma sebagai berikut:

Tabel 3.2 String yang sudah dikompresi

n Char Elias Gamma

Code

Inverted Elias Gamma Code

Bit Frek Bit x Frek

1 C 1 0 1 7 7

2 A 001 110 3 3 9

3 Sp 011 100 3 3 9

4 I 00001 11110 5 5 25

5 P 00011 11100 5 1 5

6 U 01001 10110 5 1 5

7 K 01011 10100 5 1 5

Jumlah 65

Tahap selanjutnya adalah menyusun kembali kode-kode yang telah dibuatdalam tabel sesuai dengan posisi karakter pada string. String yang telah dibacaadalah “CACA CICI CICIPI CUKA”

C A C A Sp 0 110 0 110 100


(44)

C I C I Sp 0 11110 0 11110 100

C I C I P I Sp 0 11110 0 11110 11100 11110 100

C U K A 0 10110 10100 110

Dari Tabel 3.2 dapat dibentuk string bit dari string sebelum dikompresi yaitu “CACA CICI CICIPI CUKA” menjadi string bit “0110011010001111001111010001 1110011110111001111010001011010100110”.

Sebelum ditulis ke sebuah file hasil kompresi dilakukan penambahan bitpadding dan flag diawal dan akhir string bit. Bit itu dihasilkan dari panjang string bit itu sendiri apakah habis dibagi delapan dan berapa sisanya jika dibagi delapan. Karena jumlah string bit 65 tidak habis dibagi delapan dan sisanya adalah satu. Maka dapat dibuat padding “0000000” dan flagnya adalah “00000111”. Sehingga total bit seluruhnya setelah penambahan padding dan flagging adalah 80 bits.

3.1.3.2. Analisis Proses Kompresi File Teks dengan Metode Capocelli

Berikut ini adalah contoh proses kompresi file teks dengan metode Capocelli.Terdapat file teks yang berisikan string “CACA CICI CICIPI CUKA”. Untuk mengukur ukuran String itu di dalam komputer dapat dilihat pada Tabel 3.3.

Tabel 3.3 String yang belum di kompresi

n Char ASCII Biner Bit Frek Bit x Frek

1 C 01000011 8 7 56

2 A 01000001 8 3 24

3 Sp 00100000 8 3 24

4 I 01001001 8 5 40


(45)

6 U 01010101 8 1 8

7 K 01001011 8 1 8

Jumlah 168

Suffix = ‘0’ + r * ‘1’

Untuk r = 2, maka suffix = ‘011’

Maka dapat dilakukan kompresi data pada string “CACA CICI CICIPI CUKA” sebagai berikut:

Tabel 3.4. String yang Sudah Dikompresi Dengan Algoritma Capocelli n Char Capocelli (r = 2)

Prefix Suffix Frek Bit Frek x Bit

0 C 011 7 3 21

1 A 00 011 3 4 12

2 Sp 10 011 3 4 12

3 I 000 011 5 5 25

4 P 001 011 1 5 5

5 U 010 011 1 5 5

6 K 100 011 1 6 6

Jumlah 86

C A C A Sp 01 100011 011 00011 10011 C I C I Sp 011 000011 011 000011 10011

C I C I P I Sp 011 000011 011 000011 001011 000011 10011 C U K A


(46)

Dari Tabel 3.4 dapat dibentuk string bit dari string sebelum dikompresi yaitu “CACA CICI CICIPI CUKA” menjadi string bit:

“01100011011000111001101100001101100001110011011000011011000011001011 0000111001101101001110001100011.”

Sebelum ditulis ke sebuah file hasil kompresi dilakukan penambahan bit padding dan flag diawal dan akhir string bit. Bit itu dihasilkan dari panjang string bit itu sendiri apakah habis dibagi delapan dan berapa sisanya jika dibagi delapan. Karena jumlah string bit 86 tidak habis dibagi delapan dan sisanya adalah enam. Maka dapat dibuat padding “00” dan flagnya adalah “00000010”. Sehingga total bit seluruhnya setelah penambahan padding dan flagging adalah 96 bits.

3.1.3.3.Analisis Proses menghitung Parameter Pembanding Ratio of Compression (RC), Compression Ratio (CR), dan Space Saving (SS).

1. Ratio of Compression (RC)

Ratio of Compression dari contoh menggunakan algoritma Inverted Elias Gamma dihasilkan dari jumlah ukuran data sebelum dikompresi lalu dibagikan dengan jumlah ukuran data setela dikompresi menggunakan algoritma Inverted Elias Gamma.

=

=

168

65

= 2,58


(47)

Ratio of Compression dari contoh menggunakan algoritma Capocelli dihasilkan dari jumlah ukuran data sebelum dikompresi lalu dibagikan dengan jumlah ukuran data setela dikompresi.

=

=

168

86

= 1,95

2. Compression Ratio (CR)

Compression Ratio dari contoh menggunakan algoritma Inverted Elias Gamma di hasilkan dari ukuran data setelah dikompresi menggunakan algoritma Inverted Elias Gamma di bagi ukuran data sebelum dikompresi lalu dibagi 100% .

=

100 %

=

65

168

100 %

= 38,6 %

Compression Ratio dari contoh menggunakan algoritma Capocelli dihasilkan dari ukuran data setelah dikompresi menggunakan algoritma Capocelli dibagi ukuran data sebelum dikompresi lalu dibagi100%.

$% =

100 %

=

86

168

100 %

= 51 %


(48)

3. Space Saving (SS)

Space Savings dari contoh menggunakan algoritma Inverted Elias Gamma dihasilkan dari persentase data yang belum dikompresi dikurangi dengan Compression Ratio dari kompresi menggunakan algoritma Inverted Elias Gamma.

= 100% −

= 100% − 38,6%

= 61,4%

Space Savings dari contoh menggunakan algoritma Capocelli dihasilkan dari persentase data yang belum dikompresi dikurangi dengan Compression Ratio dari kompresi menggunakan algoritma Capocelli.

= 100% −

= 100% − 51%

= 49%

3.1.3.4.Proses Dekompresi

Dalam skripsi saya ini saya menggunakan dekompresi yang secara umum bisa

digunakan dengan menggunakan algoritma apa saja. Adapun bentuk dekompresi pada skripsi saya ini yaitu;

t = table :

Char Code

C 0

A 01

Sp 110

Sb = String bit = “01100110 . . . .” function decompress (t, sb) {


(49)

buff = sb[0] l = length(sb) for (i=1 to l) {

if (buff not in t) {

buff = buff + sb[i] }

else {

String = string + t[buff] buff = ""

} }

return sb }

3.2. Pemodelan Sistem

Pemodelan sistem adalah penggambaran bagian-bagian atau komponen-komponen yang terdapat dalam sistem yang akan dirancang sesuai dengan spesifikasi dan kebutuhan sistem tersebut. Pada penelitian ini proses pemodelan sistem akan dilakukan dengan menggunakan Use-Case Diagram, Activity Diagram, Sequence Diagram.

3.2.1. Diagram Use Case

Diagram Use caseadalah teknik yang digunakan untuk menampilkan functional requirements dari sebuah sistem. DiagramUse case menampilkan bagaimana software akan bekerja dari sudut pandang user (bukan Developer).


(50)

Gambar 3.2.Gambar Diagram Use case

1. Use case

Simbol yang digunakan untuk menunjukkan fungsi sistem secara umum. Dilambangkan dengan simbol oval dengan teks yang menunjukkan fungsi sistem di dalamnya.

2. Actor.

Simbol yang digunakan untuk mewakili seseorang/sesuatu (misal: organisasi, sistem yang lain, dll) yang berinteraksi dengan sistem.

3. Association.

Kedua simbol di atas dihubungkan dengan garis yang disebut garis asosiasi. Di dalam use case juga disertakan boundary yang menunjukkan batasan antara sistem dengan luar sistem.


(51)

3.2.2. Diagram Activity

Activity diagram menggambarkan alur dari proses yang terjadi dalam sebuah use case. Activity diagram juga digunakan untuk menggambarkan logika dari sebuah sistem. Notasi/simbol yang akan digunakan di dalam Activity diagram yaitu:

1. Initial node.

Lingkaran hitam penuh yang menggambarkan awal dari proses. 2. Actions.

Persegi panjang dengan sudut lengkung yang menampilkan langkah/step dari proses. 3. Flow.

Panah yang menampilkan alur dari actions. 4. Decision.

Belah ketupat (diamond) dengan satu panah masuk dan dua panah keluar, menampilkan kondisi.

5. Merge.

Belah ketupat (diamond) dengan banyak panah masuk dan satu panah keluar, menggabungkan alur program yang sebelumnya terpisah dengan sebuah kondisi. 6. Fork.

Baris hitam dengan satu panah masuk dan dua atau lebih panah keluar, menunjukkan sebuah proses yang terjadi secara bersamaan.

7. Join.

Baris hitam dengan dua atau lebih anak panah masuk dan satu anak panah keluar. Menggambarkan proses yang terjadi secara paralel telah selesai. Seluruh proses yang terjadi ketika fork harus selesai sebelum melanjutkan ke flow berikutnya.


(52)

8. Activity final.

Lingkaran hitam penuh di dalam lingkaran hitam lain yang kosong, menggambarkan proses selesai.

Berikut ini adalah Activity diagram pada sistem yang akan dibangun : 1. Diagram Activity Buka File

Gambar 3.3.Gambar Diagram Activity Buka File Teks

2. Diagram Activity Simpan file Terkompresi.


(53)

3. Diagram Activity Pengkodean Algoritma


(54)

4. Diagram Activity Buka File Pada Proses Dekompresi

Gambar 3.6.Gambar Diagram Activity Buka File Dekompresi

5. Diagram Activity Simpan Dekompres


(55)

6. Diagram Activity Pengkodean Dekompresi


(56)

3.2.3. Diagram Sequence

Sequence diagram menggambarkan bagaimana objek saling berinteraksi melalui message dalam eksekusi operation, untuk satu buah use case. Diagram ini mengilustrasikan bagaimana message dikirim dan diterima diantara objek, dan di urutan yang mana. Sequence membantu untuk menggambarkan data yang masuk dan keluar sistem. Notasi/simbol yang akan digunakan di dalam Sequence diagram yaitu: 1. Actor.

Seseorang atau sesuatu yang berinteraksi dengan sistem, sama seperti pada use case. 2. System.

Kotak yang menunjukkan sebuah sistem sebagai black box atau secara keseluruhan. 3. Lifelines.

Garis putus vertikal di bawah aktor dan sistem, menunjukkan berjalannya sistem. 4. Activation bars.

Garis membentuk kotak panjang di bawah lifelines, menunjukkan waktu ketika objek aktif di dalam interaksi.

5. Input messages.

Garis panah horizontal dari aktor ke sistem yang menunjukkan Input. Cara penulisannya adalah diawali dengan huruf kecil, dan setiap kata setelahnya tetap digabung (tanpa spasi) namun diawali huruf kapital. Jika mengandung parameter, ditulis dengan cara yang sama, dan setiap parameter diawali dengan koma.

6. Output messages.

Garis panah putus-putus horizontal dari sistem ke aktor yang menunjukkan message yang dikirim dari sistem ke actor.

7. Receiver actor.

Aktor lain di luar sistem yang menerima message dari sistem juga dapat diikutsertakan.


(57)

8. Frame

Sebuah kotak yang dapat menutup satu atau lebih message untuk membagi sequence. Frame ini dapat menunjukkan loop, pilihan lain.

Berikut ini adalah sequence diagram pada sistem yang akan dibangun :

1. Diagram Sequence Pada Proses Kompresi


(58)

2. Diagram Sequence Pada Proses Dekompresi

Gambar 3.10. Gambar Diagram Sequence Proses Dekompresi

3.3. Perancangan Sistem Secara Umum

Tahap perancangan sistem merupakan tahap di mana sistem akan dirancang atau didesain sesuai dengan hasil analisis sistem.


(59)

3.3.1. Bagan Alir Sistem (Flowchart)

Gambar 3.11.Gambar flowchart secara umum menggunakan algoritma Inverted Elias Gamma


(60)

Gambar 3.12. Gambar Flowchart Sistem Secara Umum Menggunaka Algoritma Capocelli


(61)

Gambar 3.13. Gambar Flowchart Sistem Secara Umum Pada Aplikasi yang Akan Dirancang

3.3.2. Perancangan Antar Muka Sistem

Perancangan antarmuka sistem merupakan pembuatan GUI (Graphic User Interface) pada sistem guna untuk memberikan kemudahan kepada user dalam menggunakan sistem tersebut.


(62)

1. Form Untuk Halaman Utama

Gambar 3.14. Gambar Form Home

Keterangan :

1. Judul dari aplikasi yang telah di rancang.

2. Merupakan MenuStrip1 sebagai menu untuk form utama.

3. Merupakan MenuStrip2 sebagai menu untuk form proses kompresi. 4. Merupakan MenuStrip3 sebagai menu untuk form proses dekompresi 5. Merupakan MenuStrip4 sebagai menu untuk form informasi dari penulis. 6. Merupakan Panel1 untuk tampilan di form Home.

7. Merupakan Label1 untuk menampilkan informasi ataupun tampilan tulisan lainnya.


(63)

2. Form Untuk Halaman Compression

Gambar 3.15. Gambar Form Compression

Keterangan:

1. Judul dari aplikasi yang telah di rancang.

2. Merupakan MenuStrip1 sebagai menu untuk form utama.

3. Merupakan MenuStrip2 sebagai menu untuk form proses kompresi. 4. Merupakan MenuStrip3 sebagai menu untuk form proses dekompresi 5. Merupakan MenuStrip4 sebagai menu untuk form informasi dari penulis. 6. Merupakan Panel1 untuk menu pilih file.

7. Merupakan TextBox1 untuk menampilkan alamat file yang dipilih untuk dikompresi.


(64)

8. Merupakan TextBox2 untuk menampilkan direktori yang dituju untuk menyimpan file hasil kompresi.

9. Merupakan Button1 untuk proses pilih file yang akan dikompresi. 10. Merupakan Button2 untuk proses simpan file yang telah dikompresi. 11. Merupakan Button3 untuk proses kompresi.

12. Merupakan Button4 untuk proses hapus tampilan sebelumnya.

13. Merupakan Panel2 untuk kumpulan hasil algoritma Inverted Elias Gamma. 14. Merupakan Label1 untuk tulisan kompresi Inverted Elias Gamma.

15. Merupakan Panel3 untuk hasil dari RC,CR,SS,Waktu dari algoritma Inverted Elias Gamma.

16. Merupakan Label2 untuk tulisan algoritma Capocelli.

17. Merupakan Panel4 untuk kumpulan hasil algoritma Capocelli,

18. Merupakan Panel5 untuk hasil dari RC,CR,SS,Waktu dari algoritma Capocelli.

3. Form Untuk Halaman Decompression


(65)

Keterangan :

1. Judul dari aplikasi yang telah di rancang.

2. Merupakan MenuStrip1 sebagai menu untuk form utama.

3. Merupakan MenuStrip2 sebagai menu untuk form proses kompresi. 4. Merupakan MenuStrip3 sebagai menu untuk form proses dekompresi 5. Merupakan MenuStrip4 sebagai menu untuk form informasi dari penulis. 6. Merupakan Panel1 untuk menu pilih file.

7. Merupakan TextBox1 untuk menampilkan alamat file yang dipilih untuk didekompresi.

8. Merupakan TextBox2 untuk menampilkan direktori yang dituju untuk menyimpan file hasil dekompresi.

9. Merupakan Button1 untuk proses pilih file yang akan didekompresi. 10. Merupakan Button2 untuk proses simpan file yang telah didekompresi. 11. Merupakan Button3 untuk proses dekompresi.

12. Merupakan Button4 untuk proses hapus tampilan sebelumnya. 13. Merupakan Label1 untuk tampilan tulisan “Hasil”.

14. Merupakan Panel2 untuk hasil perhitungan waktu dekompresi. 15. Merupakan Label2 untuk tampilan tulisan “Waktu Dekompresi”.


(66)

4. Form Untuk Halaman About Me

Gambar 3.17. Gambar Form Halaman About Me

Keterangan :

1. Judul dari aplikasi yang telah di rancang.

2. Merupakan MenuStrip1 sebagai menu untuk form utama.

3. Merupakan MenuStrip2 sebagai menu untuk form proses kompresi. 4. Merupakan MenuStrip3 sebagai menu untuk form proses dekompresi 5. Merupakan MenuStrip4 sebagai menu untuk form informasi dari penulis. 6. Merupakan Panel1 untuk tampilan informasi.

7. Merupakan Label1 untuk Judul skripsi penulis.

8. Merupakan Label2 untuk sambungan judul skripsi penulis. 9. Merupakan Label3 untuk sambungan judul skripsi penulis.


(67)

10. Merupakan Label4 untuk tampilan nama penulis. 11. Merupakan Label5 untuk tampilan nim penulis skripsi. 12. Merupakan PictureBox1 untuk tampilan lambang usu. 13. Merupakan Label6 untuk tampilan program studi. 14. Merupakan Label7 untuk tampilan fakultas. 15. Merupakan Label8 untuk tampilan Universitas.

16. Merupakan Label9 untuk tampilan kota keberadaan penulis. 17. Merupakan Label10 untuk tampilan tahun skripsi.


(68)

BAB 4

IMPLEMENTASI DAN PENGUJIAN SISTEM

4.1. Implementasi Sistem

Sistem yang telah dirancang terdiri dari 5 form dalam bahasa C# dan 1 menu keluar, di antaranya yaitu Form Home untuk, Form Compress, Form Decompress, Form Help, Form About.

4.1.1. Form Home

Form Home pada aplikasi dapat dilihat pada gambar 4.1.


(69)

4.1.2. Form Compression

Form compression dapat dilihat pada gambar 4.2.

Gambar 4.2. Gambar Tampilan Form Compression

4.1.3. Form Decompression

Form decompression dapat dilihat pada gambar 4.3.


(70)

4.2. Pengujian Sistem

4.2.1.Pengujian Proses Kompresi

Gambar 4.4. Gambar Tampilan Open Dialog File


(71)

Tahap selanjutnya adalah melakukan kompresi dengan menekan tombol Compress. Hasil parameter dari proses kompresi akan muncul seperti pada gambar 4.10.

Gambar 4.6. Gambar Tampilan Hasil Parameter Pada Proses Kompresi Pada Menit Pertama

Gambar 4.7. Gambar Tampilan Hasil Parameter Pada Proses Kompresi Pada Menit Berikutnya


(72)

4.2.2.Pengujian Proses Dekompresi

Gambar 4.8. Gambar Tampilan Proses Decompression


(73)

4.3. Hasil Pengujian

Pengujian file dari proses kompresi dan dekompresi string dengan dua jenis string yaitu string yang terdiri dari karakter yang sama “AAAAA”dan string yang terdiri dari berbagai macam karakter “ABABAAB”. Pengujian dilakukan terhadap 5 file dengan string “AAAA” berekstensi *.txt dan 5 file dengan string “ABABAB” yang berekstensi *.doc yang ukuran filenya berbeda. yang ukuran filenya berbeda. Kemudian terhadap 5 file dengan string “AAAAA” yang berekstensi *.txt dengan ukuran file berbeda dan 5 file dengan string “ABABAB” yang berekstensi *.doc yang ukuran filenya juga berbeda.

Tabel 4.1. Pengujian String “AAAAAA” (*.txt) Dengan Inverted Elias Gamma

No. Uk. File *.txt (kb)

Compress

bits Cr Ss (%)

Uncompress bit

1. 1kb 64 3,25 69,2307692307692 208

2. 2kb 2184 0,09523809523 -950 208

3. 4kb 5064 0,04107424960 -2334,615384615 208

Tabel 4.2. Pengujian String “AAAAAA” (*.txt) Dengan Capocelli

No. Uk. File *.doc (kb)

Compress

bits Cr Ss (%)

Uncompress bits

1. 1kb 168 1,76190476190476 43,2432432432432432 296

2. 2kb 8264 1,98160696999032 49,5359062042013 16376

3. 4kb 17168 1,94734398561976 48,648001914336 33432

Tabel 4.3. Pengujian String “ABABAB” (*.txt) Dengan Inverted Elias Gamma

No. Uk. File *.doc (kb)

Compress

bits Cr Ss (%)

Uncompress bits

1. 13kb 840 0,27619047619047 -262,068965517241 232

2. 14kb 63592 0,00364825764247 -27310,3448275862 232


(74)

Tabel 4.4. Pengujian String “ABABAB” (*.doc) Dengan Capocelli

No. Uk. File *.doc (kb)

Compress

bits Cr Ss (%)

Uncompress bits

1. 13kb 1016 1,32283464566929 24,4047619047619 1344

2. 14kb 13288 1,35744202676474 26,332028,982541 106304 3. 15kb 157704 1,34246436361792 25,5101269649335 211712

Dari Tabel 4.1, Tabel 4.2, Tabel 4.3, Tabel 4.4, dapat dibuat grafik perbandingan hasil pengujian string berdasarkan variable Rc, Cr, Ss, waktu kompresi, dan waktu dekompresi seperti pada gambar 4.21, gambar 4.22, gambar 4.23, gambar 4.24, dan gambar 4.25.

Gambar 4.10. Grafik Hasil Parameter Homogen dan Heterogen *.txt Inverted Elias

Gamma Capocelli

Uncompress bits 0 194,734,398,561,976

Ss 208 33432

Cr -2,334,615,384,615 48,648,001,914,336

Compress bits 5064 17168

-5E+13 0 5E+13 1E+14 1.5E+14 2E+14 2.5E+14

Uncompress bits

Ss

Cr


(75)

Gambar 4. 11. Grafik Hasil Parameter Homogen dan Heterogen *.doc Inverted Elias

Gamma Capocelli

Compress bits 130152 157704

Uncompress bits 0 134,246,436,361,792

Cr -5600 255,101,269,649,335

Ss 232 211712

-5E+13 0 5E+13 1E+14 1.5E+14 2E+14 2.5E+14 3E+14

Compress bits

Uncompress bits

Cr


(76)

BAB 5

KESIMPULAN DAN SARAN

5.1. Kesimpulan

Kesimpulan yang dapat diambil dari penelitian ini adalah:

1. Aplikasi yang dirancang telah mampu melakukan kompresi dan dekompresi string dengan menggunakan algoritma Inverted Elias Gamma dan Capocelli. 2. Berdasarkan pengujian yang dilakukan dengan menggunakan String yang tidak

mengandung perulangan frase, diperoleh kesimpulan yang menunjukkan bahwa algoritma Inverted Elias Gamma lebih unggul dibandingkan algoritma Capocelli dalam melakukan proses kompresi.

3. Dalam proses dekompresi, algoritma Capocelli membutuhkan real running time yang lebih sedikit dibandingkan algoritma Invertde Elias Gamma.

5.2. Saran

Saran yang dapat diberikan Penulis untuk pengembangan dan perbaikan sistem lebih lanjut adalah:

1. Aplikasi yang di rancang diharapkan dapat mengkompresi jenis file teks lainnya seperti *.rtf dan *.pdf

2. Aplikasi yang dirancang diharapkan dapat mendeteksi apakah file tersebut mengandung frase yang berulang atau tidak.

3. Agar dapat mengkompresi komponen lain yang terdapat pada file document seperti gambar, grafik, tabel, dan lainnya.


(77)

BAB 2

TINJAUAN PUSTAKA

Pada bab ini penulis memaparkan teori-teori ilmiah yang didapat dari metode pencarian fakta yang digunakan untuk mendukung penulisan skripsi ini dan sebagai dasar pengembangan sistem sehingga dapat diimplementasikan dengan baik dan benar.

2.1. Kompresi Data

Kompresi data adalah proses mengubah sebuah aliran data input menjadi aliran data baru yang memiliki ukuran lebih kecil. Aliran yang dimaksud adalah berupa file ataupun buffer dalam memori. Kebutuhan terhadap kompresi data dipengaruhi oleh dua alasan, yaitu kecenderungan manusia untuk mengumpulkan data dan kebutuhan terhadap proses transfer data yang cepat. Karena itu metode-metode untuk mengkompresi data semakin berkembang (Salomon, 2004).

Sering terjadi mispersepsi mengenai data dan informasi, padahal data dan informasi adalah dua hal yang berbeda. Pada data terkandung suatu informasi. Namun tidak semua bagian data terkait dengan informasi tersebut atau pada suatu data terdapat bagian-bagian data yang berulang untuk mewakili informasi yang sama. Bagian data yang tidak terkait atau bagian data yang berulang tersebut disebut dengan data yang berlebihan (redudancy data). Tujuan daripada kompresi data tidak lain adalah untuk mengurangi data berlebihan tersebut sehingga ukuran data menjadi lebih kecil dan lebih ringan dalam proses transmisi (Putra, 2010). Di dalam penelitian ini, file yang akan diteliti berfokus pada jenis file teks, dengan ekstensi txt dan doc. File teks (flat file) adalah salah satu jenis file komputer yang tersusun dalam suatu urutan baris data teks biasanya diwakili oleh 8 bit kode ASCII (Solihin, 2013).


(78)

2.1.1.Teknik Kompresi Data

Berdasarkan kemungkinan data yang telah dikompresi dapat dikembalikan ke data sebelum dikompresi atau data aslinya, teknik kompresi data dikelompokkan menjadi dua bagian yaitu kompresi data lossless dan kompresi data Lossy (Pu, 2006) :

1. Kompresi Data Losless

Kompresi data lossless adalah teknik kompresi data dimana data yang telah dikompresi dapat dikembalikan ke data aslinya dengan tidak mengurangi informasi yang ada pada data tersebut. Dalam teknik kompresi ini, pada saat proses kompresi dihasilkan sebuah data yang berbeda dengan data aslinya. Karena setiap bit yang terdapat pada data di-encode sehingga dihasilkan bit yang baru yang lebih pendek. Data tersebut dikembalikan ke data aslinya (data sebelum dikompresi) pada saat proses dekompresi. Teknik kompresi lossless digunakan pada data yang tergolong penting sehingga tidak boleh ada banyak atau sebagian informasi yang hilang. Seperti misalnya pada file teks, jika terdapat sedikit saja perubahan pada data itu maka akan sangat mudah kelihatan.

Gambar 2.1. Kompresi Lossless (Pu, 2006)

Contoh aplikasi lossles compression yaitu WINRAR dan WINZIP. Contoh format file lossles compression: *.zip, *.rar, document file (*.doc, *.xls, *.ppt), file executable (*.exe)


(79)

2. Kompresi Data Lossy

Kompresi data Lossy adalah teknik kompresi data dimana data mengalami sedikit atau banyak kehilangan pada saat proses kompresi.Sama seperti data aslinya hanya saja ada perubahan kerapatan ataupun resolusi pada data tersebut. Oleh karena itu sangat kecil kemungkinan dan bahkan tidak akan pernah bisa data yang telah dikompresi dengan teknik kompresi Lossy dapat dikembalikan seperti data sebelum dikompresi atau data aslinya. Perubahan yang terjadi pada data pada saat proses kompresi tidaklah terlalu kelihatan. Teknik kompresi ini biasanya digunakan pada data berupa gambar, suara dan video. Karena pada data tersebutlah kehilangan akan informasi yang detail itu mungkin tidak dapat dirasakan oleh sistem kerja indera penglihatan dan pendengaran manusia. Contoh algoritma kompresi Lossy adalah Fractal Compression, Wavelet Compression, Wyner-Ziv Coding (WZC), dan lain-lain.

Gambar 2.2. Ilustrasi Kompresi Lossy(Sayood, 2006)

Contoh aplikasi lossy compression : aplikasi pengkompres suara (mp3 compressor),ambar (adobe photoshop, paint), video (xilisoft). Contoh format file lossy compression yaitu MP3, JPEG, MPEG

2.1.2.Pengukuran Kinerja Kompresi Data

Pada suatu teknik yang digunakan dalam proses kompresi data terdapat beberapafaktor atau variabel yang biasa digunakan untuk mengukur kualitas dari suatu teknikkompresi data tersebut, yaitu (Salomon & Motta, 2010):


(80)

1. Ratio of Compression (Rc)

Ratio of Compression (Rc) adalah perbandingan antara ukuran data sebelum dikompresi dengan ukuran data setelah dikompresi.

=

2. Compression Ratio (Cr)

Compression Ratio (Cr) adalah persentasi besar data yang telah dikompresi yang didapat dari hasil perbandingan antara ukuran data setelah dikompresi dengan ukuran data sebelum dikompresi.

=

100 %

3. Space Savings (SS)

Space Savings (SS) adalah persentase selisih antara data yang belum dikompresi dengan besar data yang dikompresi.

= 100 % −

4. Waktu kompresi dan dekompresi

Waktu kompresi dan dekompresi adalah waktu yang dibutuhkan untuk melakukan proses kompresi dan dekompresi. Semakin kecil waktu yang diperoleh maka semakin efisien metode yang digunakan dalam proses kompresi dan dekompresi itu.

2.2. Text File

Text file (disebut juga dengan flat file) adalah salah satu jenis file komputer yang tersusun dalam suatu urutan baris data teks biasanya diwakili oleh 8 bit kodeAmerican Standard Code for Information Interchange (ASCII) dan Extended Binary Coded


(81)

Decimal Interchange Code (EBCDIC) merupakan cikal bakal dari set karakter lainnya. ASCII (American Standard Code for Information Interchange) merupakan suatu standar internasional dalam kode huruf dan simbol seperti Hex dan Unicode tetapi ASCII lebih bersifat universal. ASCII digunakan oleh komputer dan alat komunikasi lain untuk menunjukkan teks. Kode ASCII memiliki komposisi bilangan biner sebanyak 8 bit, dimulai dari 00000000 hingga 11111111. Total kombinasi yang dihasilkan sebanyak 256, dimulai dari kode 0 hingga 255 dalam sistem bilangan desimal. Format file teks yang akan digunakan dalam penelitian ini adalah :

1. Format data teks

Format data teks merupakan format teks yang digunakan untuk menyimpan huruf, angka, karakter, kontrol (tabulasi, pindah baris, dan sebagainya) atau simbol-simbol lain yang biasa digunakan dalam tulisan seperti titik, koma, tanda petik, dan sebagainya. Satu huruf, angka, karakter, kontrol atau simbol pada arsip teks memakan tempat satu byte. Berbeda dengan jenis teks terformat yang satu huruf saja dapat memakan tempat beberapa byte untuk menyimpan format dari huruf tersebut seperti font, ukuran, tebal atau tidak dan sebagainya. Kelebihan dari format data teks ini adalah ukuran datanya yang kecil karena tiadanya fitur untuk memformat tampilan teks. Saat ini perangkat lunak yang paling banyak digunakan untuk memanipulasi format data ini adalah Notepad. (Pramilo, 2008)

2. Format data dokumen

Doc merupakan ekstensi arsip dokumen perangkat lunak Microsoft Word yang paling banyak digunakan dalam penulisan laporan, makalah dan sebagainya. Doc merupakan jenis teks terformat yang tidak hanya dapat mengatur tampilan teks seperti styles (font, ukuran huruf dan sebagainya), namun juga dapat menyisipkan gambar. Kekurangan format teks dokumen ini terletak pada ukuran datanya yang besar. (Pramilo, 2008)


(82)

2.3. Algoritma Inverted Elias Gamma

Inverted Elias Gamma adalah kebalikan dari Elias Gamma Code. Elias Gamma Code adalah salah satu kode yang universal yang dipelopori oleh Peter Elias yang digunakan untuk encode dan decode bilangan bulat positif n bahkan dalam kasus di mana integer terbesar yang tidak diketahui sebelumnya (Salomon, 2007). Juga, kode ini tumbuh perlahan-lahan, untuk itu baik untuk mengompresi data integer dimana jumlah bilangan bulat kecil lebih besar maka bilangan bulat besar.Adapun aturan untuk kode nomor dengan menggunakan kodeEliasGammaadalah sebagai berikut (Salomon, 2007) :

1. Menulis dalam biner.

2. Kurangi 1 dari jumlah bit yang ditulis dalam langkah 1 dan tambahkan bahwa banyak angka nol.

Ada cara yang setara dengan lengkah di atas (Salomon, 2007):

1. Pisahkan integer ke dalam kekuasaan tertinggi 2 mengandung (2N) dan N digit biner yang tersisah dari integer.

2. Encode N di unary, yaitu sebagai N nol diikuti oleh satu-satu

3. Menambahkan N digit biner yang tersisa untuk representasi ini N.

Tabel 2.1 Tabel Kode Elias Gamma (Salomon, 2007) 1 = 20 + 0 = 1 10 = 23 + 2 = 0001010 2 = 21 + 0 = 010 11 = 23 + 3 = 0001011 3 = 21 + 0 = 011 12 = 23 + 4 = 0001010 4 = 22 + 0 = 00100 13 = 23 + 5 = 0001101 5 = 22 + 1 = 00101 14 = 23 + 6 = 0001010 6 = 22 + 2 = 00110 15 = 23 + 7 = 0001111 7 = 22 + 3 = 00111 16 = 24 + 0 = 00001000 8 = 23 + 0 = 0001000 17 = 24 + 1 = 00001001 9 = 23 + 1 = 0001001 18 = 24 + 2 = 00001010


(83)

Tabel 2.2 Tabel KodeInverted Elias Gamma (Salomon, 2007) 1 = 20 + 0 = 0 10 = 23 + 2 = 1110101

2 = 21 + 0 = 101 11 = 23 + 3 = 1110100 3 = 21 + 0 = 100 12 = 23 + 4 = 1110101 4 = 22 + 0 = 11011 13 = 23 + 5 = 1110010 5 = 22 + 1 = 11010 14 = 23 + 6 = 1110101 6 = 22 + 2 = 11001 15 = 23 + 7 = 1110000 7 = 22 + 3 = 11000 16 = 24 + 0 = 11110111 8 = 23 + 0 = 1110111 17 = 24 + 1 = 11110110 9 = 23 + 1 = 1110110 18 = 24 + 2 = 11110101

Berikut adalah langkah-langkah untuk memecahkan kode bilangan bulat berdasarkan algoritma Elias Gamma Kode (Salomon, 2007):

1. Bacalah bit string sampai Anda mencapai pertama 1. Panggil 1 sebagai p dan menyebut jumlah ini nol dengan n.

2. Lanjutkan membaca setelah p dari n.

3. Ganti kode dengan karakter menurut tabel Elias Gamma Code.

2.4. Algoritma Capocelli

Algoritma Capocelli ini diusulkan oleh Renato Capocelli adalah awalan, lengkap, universal, dan juga synchronizable Ini bukan kode Fibonacci umum, tetapi terkait dengan kode C1 dan C2 dari Apostolico dan Fraenkel (Salomon, 2007). Kode tergantung pada parameter r dan dilambangkan dengan S (r + 1, 01R). Setelah r telah dipilih, dua bagian codeword dibangun dengan 01R akhiran dan awalan yang adalah string biner yang tidak mengandung akhiran. Dengan demikian jika r = 2, akhiran adalah 011 dan prefiks adalah semua string biner, dimulai dengan string kosong, yang tidak mengandung 011. Beberapa contoh dari S (3, 011) dan sangat mudah untuk melihat bagaimana awalan adalah string kosong, 0, 1, 00, 01, dan sebagainya, tetapi mereka termasuk tidak ada string dengan 011. The codeword dari N = 9 adalah 010 | 011, tapi codeword dari N = 10 memiliki awalan 100 dan tidak 011, sehingga 100 |


(1)

DAFTAR ISI

Halaman

Persetujuan ... ii

Pernyataan ... iii

Penghargaan ...iv

Abstrak ...vi

Abstract ...vii

Daftar Isi ...viii

Daftar Tabel ...xi

Daftar Gambar ...xii

BAB 1 PENDAHULUAN 1.1. Latar Belakang ... 1

1.2. Rumusan Masalah ...2

1.3. Batasan Masalah ...2

1.4. Tujuan Penelitian ...3

1.5. Manfaat Penelitian ...3

1.6. Sistematika Penulisan ...3

BAB 2 TINJAUAN PUSTAKA 2.1. Kompresi Data ...5

2.1.1. Teknik Kompresi Data ...6

2.1.2. Pengukuran Kinerja Kompresi Data...7

2.2. Text File...8

2.3. Algoritma Inverted Elias Gamma...10

2.4. Algoritma Capocelli ...11


(2)

3.1.1. Identifikasi Masalah ...16

3.1.2. Analisis Kebutuhan Sistem ...17

3.1.2.1. Kebutuhan Fungsional ...18

3.1.2.2. Kebutuhan Non-Fungsional ...18

3.1.3. Analisis Proses ...19

3.1.3.1. Analisis Proses Kompresi File Teks dengan Metode Inverted Elias Gamma ...20

3.1.3.2. Analisis Proses Kompresi File Teks dengan Metode Capocelli ...23

3.1.3.3. Analisis Proses Menghitung Parameter Pembanding Ratio of Compression (RC), Compression Ratio (CR), dan Space Saving (SS)...25

3.1.3.4. Proses Dekompresi...27

3.2. Pemodelan Sistem ...28

3.2.1. DiagramUse-Case...28

3.2.2. Diagram Activity ...30

3.2.3. Diagram Sequence ...35

3.3. Perancangan Sistem Secara Umum...37

3.3.1. Bagan Alir Sistem (Flowchart) ...38

3.3.2. Perancangan Antarmuka Sistem ...40

BAB 4 IMPLEMENTASI DAN PENGUJIAN SISTEM 4.1. Implementasi Sistem ...47

4.1.1. Frame Home...47

4.1.2. Frame Compression ...48

4.1.3.FrameDecompression...48

4.2. Pengujian Sistem ...49

4.2.1. Pengujian Proses Kompresi ...49

4.2.2. Pengujian Proses Dekompresi ...51


(3)

BAB 5 KESIMPULAN DAN SARAN

5.1. Kesimpulan ...55 5.2. Saran...55 DAFTAR PUSTAKA ...56 LAMPIRANLISTING PROGRAM


(4)

DAFTAR TABEL

Halaman

Tabel 2.1. Tabel Kode Elias Gamma...10

Tabel 2.2. Tabel Kode InvertedElias Gamma...11

Tabel 2.3. Kode (3, D11) Untuk Integer N12 dan Strings BS...19

Tabel 3.1. String yang belum di kompresi ...20

Tabel 3.2. String yang sudah di kompresi...22

Tabel 3.3. String yang belum di kompresi...23

Tabel 3.4.String yang sudah di kompresi Algoritma Capocelli...24

Tabel 4.1. Pengujian String “AAAAAA” (*.txt) dengan Inverted Elias Gamma...52

Tabel 4.2. Pengujian String “AAAAAA” (*.doc) dengan Capocelli...52

Tabel 4.3. Pengujian String “ABABAB” (*.txt) dengan Inverted Elias Gamma...52


(5)

DAFTAR GAMBAR

Halaman

Gambar 2.1. Kompresi Lossles...6

Gambar 2.2. Ilustrasi Kompresi Lossy...7

Gambar 3.1. Diagram Ishikawa Analisis Masalah ...17

Gambar 3.2. Gambar Diagram Use Case...29

Gambar 3.3. Gambar Diagram Activity Buka File Teks...31

Gambar 3.4. Gambar Diagram Activity Simpan File Terkompresi...31

Gambar 3.5. Gambar Diagram Activity Pengkodean Algoritma...32

Gambar3.6. Gambar Diagram Activity Buka File Dekompresi...33

Gambar3.7. Gambar Diagram Activity Simpan Dekompresi ...33

Gambar3.8. Gambar Diagram Activity Pengkodean Dekompresi ...34

Gambar3.9.Gambar Diagram Sequence Proses Kompresi ...36

Gambar3.10.Gambar Diagram Sequence Proses Dekompresi ...37

Gambar3.11.Gambar Flowchart Secara Umum Menggunakan Algoritma Inverted Elias Gamma...38

Gambar3.12.Gambar Flowchart SistemSecara Umum Menggunakan Algoritma Capocelli...39

Gambar3.13.Gambar Flowchart SistemSecara Umum Pada Aplikasi yang Akan Dirancang...39

Gambar3.14.Gambar Form Home ...41

Gambar3.15.Gambar Form Comprression ...42

Gambar3.16. Gambar Form Decompression...43

Gambar3.17.Gambar Form Halaman About Me ...45


(6)

Gambar4.5.Gambar Tampilan Setelah Input File...49

Gambar4.6.Gambar Tampilan Hasil Parameter Pada Proses Kompresi Pada Menit pertama...50

Gambar4.7.Gambar Tampilan Hasil Parameter Pada Proses Kompresi Pada Menit berikutnya...50

Gambar4.8.Gambar Tampilan Proses Decompression...51

Gambar4.9.Gambar Tampilan Hasil Dari Proses Decompression...51

Gambar4.10. Grafik Hasil Parameter Homogen dan Heterogen *.txt...53