BAB II TEKNIK KOMPRESI DATA - · PDF filesingkat tentang circular queue. ... Binary-search...

28
5 BAB II TEKNIK KOMPRESI DATA 2.1 Pendahuluan Kompresi data adalah proses pengkodean (encoding) informasi dengan menggunakan bit yang lebih sedikit dibandingkan dengan kode yang sebelumnya dipakai dengan menggunakan skema pengkodean tertentu. Kompresi data, terutama untuk proses komunikasi, dapat bekerja jika kedua pihak antara pengirim dan penerima data komunikasi memiliki skema pengkodean yang sama. Kompresi data hanya mungkin untuk dilakukan apabila data yang direpresentasikan dalam berntuk normal mengandung informasi yang tidak dibutuhkan. Ketika data tersebut sudah ditampilkan dalam format yang seminimal mungkin, maka data tersebut sudah tidak akan bisa dikompresi lagi. File yang demikian disebut dengan random file. 2.1.1 Kompresi Lossless Kompresi data yang menghasilkan file data hasil kompresi yang dapat dikembalikan menjadi file data asli sebelum dikompresi secara utuh tanpa perubahan apapun. Kompresi data lossless bekerja dengan menemukan pola yang berulang di dalam pesan yang akan dikompres tersebut dan melakukan proses pengkodean pola tersebut secara efisien. Kompresi ini juga dapat berarti proses untuk mengurangi redundancy. Kompresi jenis ini ideal untuk kompresi teks. Algoritma yang termasuk dalam metode kompresi lossless diantaranya adalah teknik dictionary coding dan huffman coding. 2.1.2 Kompresi Lossy Kompresi data yang menghasilkan file data hasil kompresi yang tidak dapat dikembalikan menjadi file data sebelum dikompresi secara utuh. Ketika data

Transcript of BAB II TEKNIK KOMPRESI DATA - · PDF filesingkat tentang circular queue. ... Binary-search...

Page 1: BAB II TEKNIK KOMPRESI DATA - · PDF filesingkat tentang circular queue. ... Binary-search tree adalah sebuah pohon biner yang cabang sebelah kiri dari node A memiliki nilai yang lebih

5

BAB II

TEKNIK KOMPRESI DATA

2.1 Pendahuluan

Kompresi data adalah proses pengkodean (encoding) informasi dengan

menggunakan bit yang lebih sedikit dibandingkan dengan kode yang sebelumnya

dipakai dengan menggunakan skema pengkodean tertentu. Kompresi data, terutama

untuk proses komunikasi, dapat bekerja jika kedua pihak antara pengirim dan penerima

data komunikasi memiliki skema pengkodean yang sama.

Kompresi data hanya mungkin untuk dilakukan apabila data yang

direpresentasikan dalam berntuk normal mengandung informasi yang tidak dibutuhkan.

Ketika data tersebut sudah ditampilkan dalam format yang seminimal mungkin, maka

data tersebut sudah tidak akan bisa dikompresi lagi. File yang demikian disebut dengan

random file.

2.1.1 Kompresi Lossless

Kompresi data yang menghasilkan file data hasil kompresi yang dapat

dikembalikan menjadi file data asli sebelum dikompresi secara utuh tanpa

perubahan apapun. Kompresi data lossless bekerja dengan menemukan pola yang

berulang di dalam pesan yang akan dikompres tersebut dan melakukan proses

pengkodean pola tersebut secara efisien. Kompresi ini juga dapat berarti proses

untuk mengurangi redundancy. Kompresi jenis ini ideal untuk kompresi teks.

Algoritma yang termasuk dalam metode kompresi lossless diantaranya adalah

teknik dictionary coding dan huffman coding.

2.1.2 Kompresi Lossy

Kompresi data yang menghasilkan file data hasil kompresi yang tidak

dapat dikembalikan menjadi file data sebelum dikompresi secara utuh. Ketika data

Page 2: BAB II TEKNIK KOMPRESI DATA - · PDF filesingkat tentang circular queue. ... Binary-search tree adalah sebuah pohon biner yang cabang sebelah kiri dari node A memiliki nilai yang lebih

6

hasil kompresi di-decode kembali, data hasil decoding tersebut tidak dapat

dikembalikan menjadi sama dengan data asli tetapi ada bagian data yang hilang.

Oleh karena itu kompresi jenis ini tidak baik untuk kompresi data yang kritis

seperti data teks. Bentuk kompresi seperti ini sangat cocok untuk digunakan pada

file-file gambar, suara, dan film. Contoh penggunaan kompresi lossless adalah

pada format file JPEG, MP3, dan MPEG.

2.2 Teknik Dictionary Coding

Teknik dictionary coding adalah teknik kompresi yang dilakukan dengan cara

mencari string yang sama di dalam dictionary buffer dan look-ahead buffer. Apabila

ditemukan string yang sama, maka akan dikeluarkan sebuah token yang isinya mewakili

informasi string tersebut. Karena ukuran token tersebut lebih kecil daripada ukuran

string yang diwakilinya, maka akan terjadi kompresi.

Kompresi pada dictionary coding sangat tergantung pada data yang akan

dikompresikan dan dictionary yang digunakan. Apabila pada data yang akan

dikompresikan jarang ditemukan string yang sama dengan yang ada di dictionary, maka

kinerja dari algoritma kompresinya terhadap data tersebut akan buruk. Sebaliknya,

apabila pada data yang akan dikompresikan banyak string yang sama dengan string

yang ada pada dictionary, maka kinerja algoritma kompresinya akan baik. Algoritma

yang termasuk pada dictionary coding sebagian besar berasal dari keluarga algoritma

Lempel-Ziv, seperti algoritma Lempel-Ziv Storer Szymanski (LZSS), algoritma

Lempel-Ziv 78, dan algoritma Lempel-Ziv Welch. Ketiga algoritma tersebut akan

dibahas pada subbab selanjutnya.

2.2.1 Algoritma Lempel-Ziv 77

Algoritma Lempel-Ziv 77 (LZ77) merupakan algoritma pertama dalam

keluarga algoritma Lempel-Ziv. Ide utama dari algoritma ini adalah menggunakan

sebagian dari input yang telah lewat sebagai dictionary, sehingga algoritma ini

dapat dikatakan bekerja berdasarkan prinsip sliding window. Window bagian kiri

Page 3: BAB II TEKNIK KOMPRESI DATA - · PDF filesingkat tentang circular queue. ... Binary-search tree adalah sebuah pohon biner yang cabang sebelah kiri dari node A memiliki nilai yang lebih

7

disebut dengan search buffer atau dictionary buffer, sedangkan window bagian

kanan disebut dengan look-ahead buffer. Dictionary buffer menyimpan simbol-

simbol yang baru saja dikodekan, sedangkan look-ahead buffer menyimpan

simbol yang akan dikodekan. Pada tiap iterasi, algoritma akan mencari pada

dictionary buffer substring (sepanjang mungkin) yang matching dengan prefix

pada look-ahead buffer. Jika terjadi match, maka akan ditransmisikan triplet

<p,l,s>. P menujukkan posisi match pada dictionary buffer yang dihitung dari sisi

kanan dictionary buffer. L menujukkan panjang match yang diperoleh, sedangkan

s menunjukkan simbol pertama yang tidak match pada look-ahead buffer. Setelah

token ditransmisikan, maka buffer akan digeser sebanyak jumlah match yang

terjadi. Contoh operasi algoritma LZSS dapat dilihat pada gambar 2.1.

Data: “sir sid eastman easily teases sea sick seals”

Gambar 2.1. Contoh proses encoding algoritma LZ77 [1].

Gambar 2.1 dapat dijelaskan sebagai berikut:

Pertama, input mengisi look-ahead buffer sampai penuh. Karena

karakter pertama dari look-ahead buffer tidak memiliki match,

maka akan dikeluarkan token <0,0,”s”>. Selanjutnya, karena

karakter yang dikodekan berjumlah satu buah, maka buffer akan

digeser sepanjang satu karakter ke kiri.

Selanjutnya, dapat kita lihat bahwa karakter “i” juga tidak

memiliki macth, sehingga akan dikeluarkan token <0,0,”i”>.

Karena input yang dikodekan berjumlah satu buah, buffer kembali

digeser sebanyak satu karakter ke kiri.

Page 4: BAB II TEKNIK KOMPRESI DATA - · PDF filesingkat tentang circular queue. ... Binary-search tree adalah sebuah pohon biner yang cabang sebelah kiri dari node A memiliki nilai yang lebih

8

Keadaan ketiga dan keadaan keempat masih sama seperti pada

keadaan pertama dan kedua. Dengan demikian, akan dikeluarkan

token <0,0,”r”> dan token <0,0,” “> untuk kedua keadaan tersebut.

Pada keadaan kelima barulah terjadi macth yaitu antara string “si”

pada dictionary buffer dengan pada look-ahead buffer, sehingga

token yang dikeluarkan adalah <4,1,”e”>. Pada keadaan ini, setelah

mengeluarkan token, maka input akan digeser sebanyak jumlah

karakter yang macth, yaitu sebesar dua karakter.

Selanjutnya, terjadi macth antara sesama karakter spasi pada

dictionary buffer dengan pada look-ahead buffer. Karena terjadi

macth, maka akan dikeluarkan token <4,1,”e”>. Setelah itu, input

akan digeser sebanyak jumlah karakter macth, yaitu satu buah.

Algoritma LZ77 memiliki suatu kekurangan yaitu selalu mengkodekan

dengan menggunakan token yang berisi triplet. Kekurangan inilah yang menjadi

salah satu hal yang diperbaiki oleh algoritma LZSS sehingga algoritma LZSS

dapat menghasilkan rasio kompresi yang lebih baik daripada algoritma LZ77.

2.2.2 Algoritma Lempel Ziv Storer Szymanski

Seperti yang telah dijelaskan sebelumnya, algoritma Lempel-Ziv Storer

Szymanski ini merupakan perbaikan dari algoritma LZ77. Algoritma ini

dikembangkan oleh Storer dan Szymaski pada tahun1982 [3]. Pseudocode dari

algoritma LZSS dapat dilihat pada gambar 2.1. Secara umum konsep dasarnya

masih sama dengan algoritma LZ77, yaitu menggunakan dua buffer yang diisi

oleh input berdasarkan metode sliding window. Perbedaan antara LZSS dengan

LZ77 terletak pada tiga hal berikut:

Menggunakan circular queue untuk menyimpan look-ahead buffer.

Menyimpan dictionary buffer di dalam suatu pohon biner.

Menggunakan dua jenis token, yaitu yang memiliki dua field dan

yang memiliki tiga field.

Page 5: BAB II TEKNIK KOMPRESI DATA - · PDF filesingkat tentang circular queue. ... Binary-search tree adalah sebuah pohon biner yang cabang sebelah kiri dari node A memiliki nilai yang lebih

9

Gambar 2.2. Pseudocode algoritma LZSS [8].

2.2.2.1 Perbedaan LZSS Dengan Algoritma LZ77

2.2.1.1.1 Penggunaan Circular queue

Circular queue adalah sebuah struktur basis data. Secara

fisik, circular queue adalah suatu array tetapi memiliki cara

penggunaan yang khusus. Gambar 2.2 memberikan ilustrasi

singkat tentang circular queue. Gambar tersebut menunjukkan

sebuah array 16-byte yang dibangun dengan cara menambahkan

karakter pada akhir array, dan menghapus karakter yang berada

pada awal array. Posisi awal dan akhir pada circular queue selalu

bergeser dari kanan ke kiri dan selalu ditunjukkan dengan s dan e.

Pada (a), terdapat 8 karakter sid_east, sisanya kosong. Pada (b),

semua slot pada buffer terisi dan e menunjukkan akhir dari buffer.

Pada (c), huruf pertama (huruf s) telah dihapus dan posisinya

ditempati oleh huruf sebelahnya (huruf i). Penggunaan circular

queue ini sebenarnya bertujuan untuk mempercepat proses

encoding, karena dengan digunakannya circular queue maka isi

dari look-ahead buffer tidak perlu untuk di geser satu persatu.

Page 6: BAB II TEKNIK KOMPRESI DATA - · PDF filesingkat tentang circular queue. ... Binary-search tree adalah sebuah pohon biner yang cabang sebelah kiri dari node A memiliki nilai yang lebih

10

Gambar 2.3. Circular queueI [1] .

2.2.2.1.2 Penggunaan Binary-Search Tree

Binary-search tree adalah sebuah pohon biner yang cabang

sebelah kiri dari node A memiliki nilai yang lebih kecil dari node

A, sedangkan cabang sebelah kanan memiliki nilai yang lebih

besar daripada node A. Untuk membandingkan antara satu string

dengan yang lainnya digunakan prinsip lexicographic order, yaitu

berdasarkan kemunculan string tersebut pada alfabet. Sebagai

contoh, string “dana” memiliki nilai lebih kecil daripada “dara”,

karena huruf ketiga (“n”) dari kata dana muncul lebih dulu

daripada huruf ketiga dari kata dari (“r”). Karakter spasi memiliki

nilai yang lebih kecil daripada alfabet, sedangkan angka diletakkan

setelah alfabet. Contoh sebuah binary-search tree dapat dilihat

pada gambar 2.3.

Gambar 2.4. Gambar adalah sebuah binary-search tree [1].

2.2.2.1.3 Perbedaan Dalam Penggunaan Token

Algoritma LZSS menggunakan dua jenis token, yaitu:

Page 7: BAB II TEKNIK KOMPRESI DATA - · PDF filesingkat tentang circular queue. ... Binary-search tree adalah sebuah pohon biner yang cabang sebelah kiri dari node A memiliki nilai yang lebih

11

Token yang terdiri dari pasangan byte <1,s>.

Token yang terdiri dari triplet <0,p,l>.

Variabel S adalah simbol pertama pada look-ahead buffer

yang tidak match. Variabel P adalah posisi match yang ditemukan

pada dictionary buffer, sedangkan variabel L adalah panjang match

yang ditemukan. Bit 1 dan 0 pada awal token berfungsi layaknya

sebuah flag.

Token jenis pertama akan dikeluarkan apabila tidak terjadi

match antara dictionary buffer dengan look-ahead buffer,

sedangkan token kedua akan dikelarkan apabila terjadi match

antara dictionary buffer dengan look-ahead bufer. Token kedua

akan lebih sering digunakan jika dalam proses pengkodean sering

ditemukan match.

Penggunaan dua jenis token ini adalah salah satu konsep

yang membuat kompresi algoritma LZSS lebih baik daripada

kompresi algoritma LZ77. Hal ini terjadi karena algoritma LZSS

hanya mengeluarkan token dengan 2 karakter ketika tidak terjadi

match, sedangkan algoritma LZ77, seperti yang telah dijelaskan

sebelumnya, tetap mengeluarkan token dengan tiga karakter ketika

tidak terjadi match.

2.2.2.2 Contoh Kasus Operasi Algoritma LZSS

Contoh proses pengkodean menggunakan algoritma LZSS dapat kita

lihat pada tabel II-1.

Page 8: BAB II TEKNIK KOMPRESI DATA - · PDF filesingkat tentang circular queue. ... Binary-search tree adalah sebuah pohon biner yang cabang sebelah kiri dari node A memiliki nilai yang lebih

12

Data: “aababacbaacbaadaaa” Tabel II-1. Proses pengkodean LZSS [8].

Input Buffer (search__look-ahead) Output

aababacbaacbaadaaa aaaa 1aaababacbaacbaadaaa aaaa aaba 002babacbaacbaadaaa aaaa baba 1babacbaacbaadaaa aaab abac 022acbaacbaadaaa abab acba 1acbaacbaadaaa baba cbaa 1cbaacbaadaaa abac baac 012acbaadaaa acba acba 004adaaa acba adaa 1adaaa cbaa daaa 1daaa baad aaa 012a adaa a 1a

Pada contoh di atas, besarnya buffer (dictionary buffer dan look-

ahead buffer) adalah 8 bit. Proses yang terjadi adalah:

Ketika awal pembacaan data, buffer diisikan dengan karakter

awal yang diduplikasikan. Karena belum ada data pada

dictionary buffer yang bisa dijadikan referensi, maka output

dari encoder adalah karakter yang digunakan untuk

inisialisasi dictionary buffer tersebut.

Selanjutnya masukkan 4 bit awal dari data, yaitu string

“aaba”, ke look-ahead buffer. Encoder akan mencari data

pada dictionary buffer yang sama dengan bit awal dari string

pada look-ahead buffer. Maka encoder akan mencari string

terpanjang pada dictionary buffer yang bit awalnya sama

dengan bit awal string pada look-ahead buffer. Maka

encoder akan menemukan string “aa”. Output dari encoder

adalah 022.

Page 9: BAB II TEKNIK KOMPRESI DATA - · PDF filesingkat tentang circular queue. ... Binary-search tree adalah sebuah pohon biner yang cabang sebelah kiri dari node A memiliki nilai yang lebih

13

Selanjutnya, buffer akan digeser ke kiri sepanjang string

yang sama. Dalam contoh, buffer digeser ke kiri sebanyak 2

bit.

Pada keadaan selanjutnya, karena pada dictionary buffer

tidak ada karakter b, maka encoder akan mengeluarkan token

1b. dictionary buffer akan digeser satu bit ke kiri.

Dst.

2.2.3 Algoritma Lempel-Ziv 78

Algoritma ini merupakan algoritma ketiga yang muncul dalam keluarga

algoritma Lempel-Ziv. Berbeda dengan dua algoritma Lempel-Ziv sebelumnya,

algoritma ini tidak lagi menggunakan search buffer dan look-ahead buffer yang

digunakan secara sliding window, melainkan menggunakan suatu dictionary yang

dibangun dari string-string yang telah dokodekan sebelumnya. Output hasil

encoding-nya selalu berupa token yang berisi pasangan byte. Untuk simbol yang

belum ada di dictionary maka akan dikeluarkan token <0,s>. Ketika

mengkodekan simbol/string yang sudah ada di dictionary , maka algoritma akan

memperpanjang input yang akan dikodekan satu per satu karakter sampai

menjadi string yang belum ada pada dictionary. Pada keadaan ini akan

dikeluarkan token <p,s>, dengan p menunjukkan posisi suatu simbol/string

tersebut dalam dictionary dan s menunjukkan simbol pertama yang membedakan

string baru yang lebih panjang tersebut dengan simbol/string pada posisi p di

dictionary. Contoh operasi algoritma LZ78 dapat dilihat pada gambar 2.4.

Data: “aababacbaacbaadaaa”

Page 10: BAB II TEKNIK KOMPRESI DATA - · PDF filesingkat tentang circular queue. ... Binary-search tree adalah sebuah pohon biner yang cabang sebelah kiri dari node A memiliki nilai yang lebih

14

Gambar 2.5. Contoh operasi algoritma LZ78 [8].

Gambar 2.4 dapat dijelaskan sebagai berikut:

Pertama kali, karena dictionary masih kosong, maka simbol

pertama yang datang akan dikode dengan token <0,s>. Karena

simbol pertama adalah huruf a, maka akan dikeluarkan token <0,a>

dan encoder akan memasukkan huruf a ke dalam dictionarydengan

indeks 1.

Selanjutnya, data yang akan dikodekan bergeser ke huruf a yang

kedua. Karena sudah ada huruf a sebelumnya, maka akan

dikeluarkan token 1. Tetapi proses tidak berlangsung sampai

disana. Ketika simbol/string yang akan dikodekan sudah ada di

dalam dictionary, maka algoritma akan terus memperpanjang

string tersebut sampai menjadi string pertama yang belum ada di

dictionary. Pada contoh di atas, karena string “ab” belum ada pada

dictionary, maka algoritma akan mengkodekan input sampai

bagian tersebut. Dengan demikian, token <1,b> akan dikeluarkan

yang mewakili suatu string yang tersusun atas isi dari dictionary

dengan indeks 1 diikuti dengan huruf b. Pada saat yang sama,

Page 11: BAB II TEKNIK KOMPRESI DATA - · PDF filesingkat tentang circular queue. ... Binary-search tree adalah sebuah pohon biner yang cabang sebelah kiri dari node A memiliki nilai yang lebih

15

karena string “ab” belum ada di dictionary, maka string tersebut

akan ditambahkan pada dictionary dengan indeks 2.

Pada keadaan ketiga ini encoder akan membaca simbol keempat,

yaitu huruf a. Namun, karena huruf a ini sudah ada pada

dictionary, maka encoder akan memperpanjang menjadi string

“ab”. Sama seperti sebelumnya, karena string “ab” merupakan

salah satu entry pada dictionary, maka encoder akan kembali

memerpanjang deretan string yang akan dikodekan menjadi “aba”.

Karena string ini belum ada di dictionary, maka encoder akan

menambahkan string ini ke dalam dictionary dengan indeks 3.

Token yang dikeluarkan adalah <2,a>. Angka 2 pada token

menujukkan string “ab”, sedangkan huruf a mewakili huruf a

tambahan setelah string pada indeks 2 di dictionary.

Selanjutnya, encoder akan membaca simbol c. Karena simbol

tersebut belum ada pada dictionary, maka akan dikodekan dengan

token <0,c> dan huruf c akan dimasukkan ke dalam dictionary

dengan indeks 4.

Pada keadaan kelima ini, encoder akan membaca huruf b. Karena

huruf b belum ada pada dictionary, maka akan dikeluarkan token

<0,b> dan huruf b tersebut akan dimasukkan ke dalam dictionary

dengan indeks 5.

Selanjutnya, encoder akan membaca huruf a. Karena huruf a sudah

ada di dictionary, maka encoder akan terus membaca input

sehingga akan terbaca string “aa”. Karena string tersebut belum

ada di dictionary, maka encoder akan menambahkan string

tersebut ke dalam dictionary dengan indeks 6, dan mengeluarkan

token <1,a>.

Selanjutnya, encoder akan membaca huruf c. Karena huruf c sudah

ada di dictionary, maka encoder akan memperpanjang string

Page 12: BAB II TEKNIK KOMPRESI DATA - · PDF filesingkat tentang circular queue. ... Binary-search tree adalah sebuah pohon biner yang cabang sebelah kiri dari node A memiliki nilai yang lebih

16

sampai terbaca string “cb”. Dengan demikian, maka akan

dikeluarkan token <4,b>. Angka 4 mewakili huruf c yang

menempati indeks 4 pada dictionary, sedangkan huruf b pada token

menujukkan adalah huruf b tambahan yang mengikuti huruf c.

Selanjutnya, encoder akan membaca huruf a. Karena huruf a sudah

ada pada dicitonary, maka encoder akan memperpanjang string

yang dibacanya sehingga menjadi “aa”. Namun, karena string “aa”

tersebut juga ada pada dictionary, maka encoder akan

memperpanjang lagi sehingga string yang terbaca adalah “aad”.

Karena string ini belum ada pada dictionary, maka encoder akan

berhenti membaca dan mengkodekan string ini dengan token

<6,d>. Angka 6 mewakili indeks tempat string “aa” pada

dictionary, sedangkan huruf d merupakan huruf d yang mengikuti

string “aa” sehingga string yang terbaca adalah string “aad”.

Keadaan selanjutnya sama seperti proses ini.

2.2.4 Algoritma Lempel-Ziv Welch

Algoritma ini merupakan perbaikan dari algoritma LZ78 yang diajukan

oleh Terry Welch pada tahun 1984 [1]. Prinsip kerja algoritma ini sebagian besar

sama dengan algoritma LZ78. Perbaikan yang dilakukan adalah mengurangi

output encoder dari pasangan ke bilangan tunggal. Pseudocode algoritma LZW

dapat dilihat pada gambar 2.5.

Page 13: BAB II TEKNIK KOMPRESI DATA - · PDF filesingkat tentang circular queue. ... Binary-search tree adalah sebuah pohon biner yang cabang sebelah kiri dari node A memiliki nilai yang lebih

17

Gambar 2.6. Pseudocode algoritma LZW [8].

Contoh operasi algoritma LZW dapat dilihat pada tabel II-2.

Data: “aababacbaacbaadaaa”

Tabel II-2. Contoh proses encoding algoritma LZW [8].

encoder dictionary 

input output indeks entry 

  1 a   2 b   3 c   4 d aa 1 5 aa ab 1 6 ab ba 2 7 ba 

aba 6 8 aba ac 1 9 ac cb 3 10 cb baa 7 11 baa acb 9 12 acb baad 11 13 baad da 4 14 da 

aaa 5 15 aaa 

Proses encoding pada tabel II-2 dapat dijelaskan sebagai berikut:

Page 14: BAB II TEKNIK KOMPRESI DATA - · PDF filesingkat tentang circular queue. ... Binary-search tree adalah sebuah pohon biner yang cabang sebelah kiri dari node A memiliki nilai yang lebih

18

Pertama encoder akan mengisi dictionary dengan semua simbol

yang ada pada data input.

Selanjutnya, encoder akan mengkodekan huruf a. Namun, karena

huruf a telah ada di dalam dictionary, maka encoder akan mencoba

mengkodekan lebih banyak lagi sehingga akan terbaca string “aa”.

Karena string “aa” ini tidak ada di dalam dictionary, maka encoder

akan menambahkan string tersebut, dan mengeluarkan output

token 1 untuk mengkodekan huruf a.

Lalu, encoder akan mengkodekan huruf a yang kedua. Namun,

karena huruf a telah ada di dalam dictionary, maka encoder akan

mencoba mengkodekan lebih banyak lagi sehingga akan terbaca

string “ab”. Karena string tersebut belumada di dictionary, maka

encoder akan menambahkan string tersebut. Encoder akan

mengeluarkan output token 1 lagi untuk huruf a yang kedua.

Selanjutnya, encoder akan mengkodekan huruf b. Namun, karena

huruf b ada di dalam dictionary, maka encoder akan

memperpanjang string yang akan dikodekannya menjadi string

“ba”. Karena string tersebut belum ada pada dictionary, maka

encoder akan menambahkannya. Encoder juga akan mengeluarkan

token 2 untuk mewakili huruf b.

Selanjutnya, encoder akan mengkodekan huruf a. Namun, karena

huruf b ada di dalam dictionary, maka encoder akan

memperpanjang string yang akan dikodekannya menjadi string

“ab”. Selanjutnya, karena string “ab” juga ada di dalam

dictionary, maka encoder akan memperpanjang string yang akan

dikodekannya menjadi string “aba”. Karena string tersebut tidak

ada pada dictionary, maka encoder akan menambahkannya, dan

akan mengeluarkan token 6 yang mewakili string “ab”.

Page 15: BAB II TEKNIK KOMPRESI DATA - · PDF filesingkat tentang circular queue. ... Binary-search tree adalah sebuah pohon biner yang cabang sebelah kiri dari node A memiliki nilai yang lebih

19

Selanjutnya encoder akan mengkodekan huruf a. Namun, karena

huruf a ada di dalam dictionary, maka encoder akan

memperpanjang string yang akan dikodekannya menjadi string

“ac”. Karena string “ac” belum ada pada dictionary, maka encoder

akan menambahkan string tersebut ke dalam dictionary, sekaligus

mengeluarkan token 1 untuk mewakili huruf a yang dikodekannya.

Selanjutnya encoder akan mengkodekan huruf c. Karena string

selanjutnya tidak ada yang sama dengan string-string pada

dictionary, maka encoder akan mengeluarkan token 3 yang

mewakili huruf c saja. Pada saat yang sama, encoder juga akan

membaca string “cb” dan akan menambahkan string tersebut ke

dalam dictionary.

Selanjutnya, encoder akan mengkodekan huruf b. Namun, karena

huruf b sudah ada pada dictionary, maka encoder akan

memperpanjang string yang akan dikodekan menjadi “ba”. Setelah

itu, karena string “ba” tersebut ada dalam dictionary, maka

encoder akan mencoba memperpanjang string yang akan

dikodekannya. Namun tidak ditemukan lagi string yang sama

dengan dictionary, sehingga encoder hanya akan mengkodekan

string “ba” dengan token 7. Pada saat yang sama, encoder juga

akan menambahkan string “baa” ke dalam dictionary.

Selanjutnya, encoder akan mengkodekan huruf a. Namun, karena

huruf a ada dalam dictionary, maka encoder akan memperpanjang

string yang akan dikodekannya menjadi string “ac”. Setelah itu,

karena string “ac” juga ada pada dictionary, maka encoder akan

membaca lebih lanjut lagi menjadi string “acb”. Karena “acb”

tidak ada di dictionar y, maka encoder akan menambahkan string

tersebut dan mengeluarkan token 9 untuk mewakili string “ac”.

Dst.

Page 16: BAB II TEKNIK KOMPRESI DATA - · PDF filesingkat tentang circular queue. ... Binary-search tree adalah sebuah pohon biner yang cabang sebelah kiri dari node A memiliki nilai yang lebih

20

2.3 Huffman Coding

Algoritma ini akan dibahas pada Tugas akhir ini karena algoritma ini merupakan

algoritma yang digunakan oleh salah satu program kompresi untuk benchmarking

algoritma LZSS. Dalam Huffman coding, panjang blok dari keluaran sumber dipetakan

dalam blok biner berdasarkan panjang variabel. Cara seperti ini disebut sebagai

fixed to variable-length coding. Ide dasar dari cara Huffman ini adalah

memetakan mulai simbol yang paling banyak terdapat pada sebuah urutan sumber

sampai dengan yang jarang muncul menjadi urutan biner. Dalam variable-length

coding, sinkronisasi merupakan suatu masalah. Ini berarti harus terdapat satu cara untuk

memecahkan urutan biner yang diterima kedalam suatu codeword.

Seperti yang disebutkan diatas, bahwa ide dari Huffman Coding dalam

memilih panjang codeword dari yang paling besar probabilitasnya sampai dengan

urutan codeword yang paling kecil probabilitasnya. Apabila kita dapat memetakan

setiap keluaran sumber dari probabiltas p ke sebuah codeword dengan panjang 1/p dan

pada saat yang bersamaan dapat memastikan bahwa dapat decode kembali secara

unik, kita dapat mencari rata-rata panjang kode H(x). Huffman Code dapat

mendekodekan secara unik dengan H(x) minimum, dan optimum pada keunikan

dari kode-kode tersebut. Algoritma dari Huffman coding adalah :

1. Pengurutan keluaran sumber dimulai dari probabilitas paling tinggi.

2. Menggabungkan 2 keluaran yang sama dekat kedalam satu keluaran

yang probabilitasnya merupakan jumlah dari probabilitas sebelumnya.

3. Apabila setelah dibagi masih terdapat 2 keluaran, maka lanjut

kelangkah berikutnya, namun apabila masih terdapat lebih dari 2,

kembali ke langkah 1.

4. Memberikan nilai 0 dan 1 untuk kedua keluaran

5. Apabila sebuah keluaran merupakan hasil dari penggabungan 2 keluaran

dari langkah sebelumnya, maka berikan tanda 0 dan 1 untuk

codeword-nya, ulangi sampai keluaran merupakan satu keluaran yang

berdiri sendiri.

Page 17: BAB II TEKNIK KOMPRESI DATA - · PDF filesingkat tentang circular queue. ... Binary-search tree adalah sebuah pohon biner yang cabang sebelah kiri dari node A memiliki nilai yang lebih

21

Contoh penggunaan algoritma Huffman coding adalah:

Jika kita memiliki kalimat: “example of huffman coding”, maka hal pertama

yang harus dilakukan adalah menghitung probabilitas dari tiap-tiap simbol. Hasilnya

dapat diilhat pada tabel II-3.

Tabel II-3. Hasil perhitungan peluang kemunculan simbol.

Simbol Probabilitas

e 2/25

x 1/25

a 2/25

m 2/25

p 1/25

l 1/25

"spasi" 3/25

o 2/25

f 2/25

h 1/25

u 1/25

c 1/25

d 1/25

i 1/25

n 2/25

g 1/25

Dengan melakukan prosedur sesuai dengan algoritma Huffman, maka akan

didapatkan Huffman tree sebagai berikut:

Page 18: BAB II TEKNIK KOMPRESI DATA - · PDF filesingkat tentang circular queue. ... Binary-search tree adalah sebuah pohon biner yang cabang sebelah kiri dari node A memiliki nilai yang lebih

22

Gambar 2.7. Huffman tree.

Dengan adanya Huffman tree seperti pada gambar 2.6, maka ketika

mengkodekan codeword yang digunakan adalah codeword sesuai dengan posisi pada

Hufman tree. Sebagai contoh, untuk spasi akan dikodekan dengan codeword “1000”,

sedangkan untuk huruf g akan dikodekan dengan codeword “11111”.

2.4 Data Training Set

Data training set adalah data-data yang dipakai sebagai bahan untuk

mengevaluasi kinerja program kompresi yang telah dibuat. Data-Data tersebut berasal

dari sumber yang berbeda-beda dan memiliki skala penggunaan yang berbeda pula.

Data yang paling baik untuk evaluasi adalah data yang telah dipilih dan distandardisasi

berdasarkan ilmu probabilistik dan statistika. Data yang telah distandardisasi tersebut

Page 19: BAB II TEKNIK KOMPRESI DATA - · PDF filesingkat tentang circular queue. ... Binary-search tree adalah sebuah pohon biner yang cabang sebelah kiri dari node A memiliki nilai yang lebih

23

akan menghasilkan keluaran yang lebih merepresentasikan kinerja suatu algoritma

kompresi terhadap bentuk data yang banyak digunakan secara umum.

2.4.1 Corpus

Corpus adalah kumpulan data standar yang digunakan dalam melakukan

evaluasi terhadap suatu kompresi lossless secara empiris. Corpus diperlukan

untuk memberikan bukti secara riil terhadap hasil analitis. Sebagai contoh, secara

analitis algoritma LZ78 memberikan kompresi yang sangat baik untuk input yang

banyak, tetapi dalam situasi praktis, kebanyakan file terlalu kecil, sehingga ketika

dikompresi menggunakan LZ78 tidak memberikan hasil yang optimal.

Menurut [4] cara terbaik untuk mengevaluasi suatu kompresi adalah

dengan mengevaluasi setiap kemungkinan input dan mencatat keluaran input

tersebut. Tetapi cara ini tidak mungkin untuk dilakukan karena memerlukan

sistem komputasi yang banyak. Cara yang paling optimal dalam mengevaluasi

suatu kompresi adalah dengan mengujikan data-data yang paling mungkin

digunakan. Hal tersebutlah yang mendasari pembentukan suatu Corpus. Selain hal

di atas, yang mendasari pembuatan Corpus adalah karena pada masa sebelum

dibuatnya Corpus, kebanyakan orang menggunakan data milik pribadinya untuk

mengevaluasi suatu algoritma kompresi. Menurut penulis hal ini memberikan

hasil yang kurang objektif karena bisa saja data tersebut telah dimanipulasi untuk

bekerja optimal menggunakan suatu algoritma kompresi tertentu.

2.4.1.1 Calgary Corpus

Calgary Corpus adalah Corpus pertama yang dibuat. Calgary

Corpus dikembangkan pada tahun 1980an, dan menjadi standar de facto

pengujian kompresi pada tahun 1990an [5].

Data yang digunakan dalam Calgary Corpus lebih terdiri dari

beberapa file teks sederhana, file gambar, dan beberapa source code

program. Isi dari Calgary Corpus dapat dilihat pada table II-2.

Page 20: BAB II TEKNIK KOMPRESI DATA - · PDF filesingkat tentang circular queue. ... Binary-search tree adalah sebuah pohon biner yang cabang sebelah kiri dari node A memiliki nilai yang lebih

24

Calgary Corpus dianggap sudah kadaluarsa karena data yang

digunakan oleh Corpus tersebut sudah tidak sesuai lagi dengan data-data

yang banyak dipakai saat ini. Sebagai contoh, saat ini banyak sekali file-file

html yang digunakan dalam membentuk suatu situs web, tetapi file bentuk

html tersebut tidak ada dalam Calgary Corpus. Alasan inilah yang

mendasari dikembangkannya Corpus baru pada awal tahun 1997 yang

diberi nama Canterbury Corpus. Meskipun demikian, Calgary Corpus tetap

saja masih sering digunakan sebagai tambahan data acuan untuk

benchmarking kinerja suatu algoritma kompresi.

Tabel II-4. Daftar file Calgary Corpus

File  Akronim Kategori Ukuran (byte)

obj1  obj1 Object code for VAX 21504

progc  progc Source code in "C" 39611

progp  progp Source code in PASCAL 49379

paper1  paper1 Technical paper 53161

progl  progl Source code in LISP 71646

paper2  paper2 Technical paper 82199

trans  trans Transcript of terminal session  93695

geo  geo Geophysical data 102400

bib  bib Bibliography (refer format) 111261

obj2  obj2 Object code for Apple Mac 246814

news  news USENET batch file 377109

pic  pic Black and white fax picture 513216

book2  book2 Non‐fiction book (troff format)  610856

book1  book1 Fiction book 768771

     Total 3141622

Page 21: BAB II TEKNIK KOMPRESI DATA - · PDF filesingkat tentang circular queue. ... Binary-search tree adalah sebuah pohon biner yang cabang sebelah kiri dari node A memiliki nilai yang lebih

25

2.4.1.2 Canterbury Corpus

Seperti yang telah dijelaskan sebelumnya, Canterbury Corpus

merupakan pengganti dari Calgary Corpus yang dianggap sudah

kadaluarsa. Data-Data yang digunakan dalam Canterbury Corpus adalah

data-data kontemporer yang sering dipakai di masa sekarang. Data-Data

yang digunakan dalam Canterbury Corpus dalam kita lihat pada tabel II-3.

Penjelasan tentang pemilihan data-data yang digunakan dalam Canterbury

Corpus dijelaskan dalam [4].

Tabel II-5. File-File yang digunakan dalam Canterbury Corpus.

File  Akronim Kategori Ukuran (byte)

alice29.txt text English text 152089

asyoulik.txt play Shakespeare 125179

cp.html html HTML source 24603

fields.c Csrc C source 11150

grammar.lsp list LISP source 3721

kennedy.xls Excl Excel Spreadsheet 1029744

lcet10.txt tech Technical writing 426754

plrabn12.txt poem Poetry 481861

ptt5  fax CCITT test set 513216

sum  SPRC SPARC Executable 38240

xargs.1 man GNU manual page 4227

     Total 2810784

2.4.3 Data Dari Archieve Comparison Test

Archieve Comparison Test (ACT) [6] adalah suatu situs web yang

menyediakan data-data benchmarking beberapa program kompresi yang populer

digunakan. Data-Data ini merupakan suatu kumpulan dari hasil riset yang

dilakukan oleh seorang Doktor yang bernama Jeff Gilchrist dari Universitas

Carleton, Ottawa, Kanada. Bahan-Bahan yang digunakan diantaranya adalah:

• Corpus Calgary.

• Corpus Canterbury.

Page 22: BAB II TEKNIK KOMPRESI DATA - · PDF filesingkat tentang circular queue. ... Binary-search tree adalah sebuah pohon biner yang cabang sebelah kiri dari node A memiliki nilai yang lebih

26

• File teks yang telah distandardisasi menurut ACT.

• File gambar yang telah distandardisasi ACT.

Di bawah ini akan dibahas tentang data-data acuan yang digunakan yang

belum dibahas sebelumnya dalam Tugas Akhir ini.

2.4.3.1 Kompresi Teks

Data ini adalah data yang dipakai untuk kompresi teks pada [6],

yang terdiri dari tiga buah file teks. Atribut data tersebut dapat kita lihat

selengkapnya pada tabel II-4.

Tabel II-6. File benchmarking teks yang digunakan ACT

File  Akronim Isi File Ukuran (byte)

1musk10.txt musk The Three Musketeers 1344739

anne11.txt anne Anne of Green Gables 586390

world95.txt world CIA World Fact Book 2988578

     Total 4919707

2.4.3.2 Kompresi TIFF

Data ini adalah data yang dipakai oleh ACT untuk benchmarking

program kompresi terhadap gambar-gambar yang berekstensi .TIFF. Atribut

lengkap dari file gambar yang digunakan dapat kita lihat pada tabel II-5,

sedangkan isi file tersebut dapat kita lihat pada gambar 2.5-2.12.

Tabel II-7. Atribut file gambar yang digunakan oleh ACT

File  Ukuran Hasil Kompresi  Rasio 

clegg.tiff 1749650 1963137  112.2017

frymire 3706306 566383  15.2816

lena  786568 852639  108.3999

monarch 1179784 1022627  86.67917

peppers 786568 798470  101.5132

sail  1179784 1149924  97.46903

serrano 1498414 233356  15.57353

tulips 1179784 1177853  99.83633

Total 12066858 7764389  64.34474

Page 23: BAB II TEKNIK KOMPRESI DATA - · PDF filesingkat tentang circular queue. ... Binary-search tree adalah sebuah pohon biner yang cabang sebelah kiri dari node A memiliki nilai yang lebih

27

Gambar 2.8. Clegg.TIFF [6].

Gambar 2.9. Frymire.TIFF [6].

Gambar 2.10 Lena.TIFF [6].

Gambar 2.11. Monarch.TIFF [6].

Gambar 2.12. Peppers.TIFF [6].

Gambar 2.13. Sail.TIFF [6].

Page 24: BAB II TEKNIK KOMPRESI DATA - · PDF filesingkat tentang circular queue. ... Binary-search tree adalah sebuah pohon biner yang cabang sebelah kiri dari node A memiliki nilai yang lebih

28

Gambar 2.14. Serrano.TIFF [6].

Gambar 2.15. Tulips.TIFF [6].

2.3.4 Data Milik Penulis

Selain data-data yang telah disebutkan di atas, penulis juga menggunakan

beberapa data milik penulis. Tujuannya adalah untuk mengevaluasi kinerja

algoritma LZSS secara spesifik untuk melakukan kompresi data-data yang telah

penulis kelompokkan.

2.3.4.1 File Teks

File teks milik penulis yang akan digunakan di dalam Tugas Akhir

ini telah penulis standarkan dalam format Microsoft Word. File-File yang

memiliki format selain format Word telah penulis konversikan terlebih

dahulu.

Selanjutnya, file-file tersebut penulis kelompokkan berdasarkan

isinya. Kelompok-Kelompok tersebut adalah:

Buku teknik.

Buku non-teknik.

Artikel bahasa Indonesia.

Kelompok buku teknik memiliki ciri-ciri sebagai berikut:

Ukuran file besar.

Frekuensi kemunculan gambar tinggi.

Page 25: BAB II TEKNIK KOMPRESI DATA - · PDF filesingkat tentang circular queue. ... Binary-search tree adalah sebuah pohon biner yang cabang sebelah kiri dari node A memiliki nilai yang lebih

29

Menggunakan bahasa Inggris.

Kelompok buku non-teknik memiliki ciri-ciri sebagai berikut:

Ukuran file lebih kecil daripada buku teknik.

Frekuensi kemunculan gambar rendah.

Menggunakan bahasa Inggris.

Kelompok artikel bahasa Indonesia memiliki ciri sebagai berikut:

Ukuran file relatif sedang.

Frekuensi kemunculan gambar lebih kecil dari buku teknik

tetapi lebih besar dari buku non-teknik.

Menggunakan bahasa Indonesia.

2.3.4.2 File Gambar

File gambar yang penulis gunakan dalam Tugas Akhir ini memiliki

format yang sama. Hal ini penulis lakukan agar perlakuan algoritma LZSS

terhadap semua file sama sehinga evaluasi untuk mengetahui jenis file

gambar yang memberikan kompresi yang optimal oleh algortma LZSS

dapat dilakukan.

File-File gambar yang penulis gunakan tidak penulis kelompokkan.

Melakukan pengelompokkan file gambar secara gamblang berdasarkan ciri

tertentu tidak memungkinkan untuk penulis lakukan karena kesamaan

karakteristik pada file gambar sangat sulit untuk ditemukan.

2.4 Program Kompresi Existing

Pada Tugas Akhir ini, benchmarking kinerja algoritma LZSS dilakukan terhadap

beberapa program kompresi yang banyak digunakan secara luas di masyarakat.

Selanjutnya akan dijelaskan lebih jauh tentang program-program kompresi yang

digunakan pada Tugas Akhir ini.

Page 26: BAB II TEKNIK KOMPRESI DATA - · PDF filesingkat tentang circular queue. ... Binary-search tree adalah sebuah pohon biner yang cabang sebelah kiri dari node A memiliki nilai yang lebih

30

2.5.1 WinZip

WinZip adalah salah satu program kompresi yang banyak digunakan

secara luas di masyarakat. Program ini dikembangkan oleh Nico Mak pada tahun

1998. Winzip dapat berkerja di lingkungan sistem operasi Microsoft Windows

maupun Apple Macintosh. File-File hasil kompresi WinZip memiliki ekstensi

.ZIP.

Ketika melakukan kompresi, program WinZip menggunakan empat buah

algoritma yang digunakan secara kaskade. Algoritma tersebut adalah LZH, LZW,

Shannon-Fano, dan Huffman Coding.

Pada Tugas Akhir ini, program WinZip bukanlah program yang dijadikan

pembanding utama, melainkan hanya diikut sertakan sebagai bahan pertimbangan

tambahan.

2.5.2 WinRAR

WinRAR adalah sebuah program kompresi yang dapat digunakan di

lingkungan sistem operasi Microsoft Windows maupun UNIX. Program ini dibuat

oleh Eugene Roshal pada tahun 1993. Untuk melakukan kompresinya, WinRAR

menggunakan algoritma kompresi LZ77 dan Huffman Coding secara kascade.

Pada Tugas Akhir ini, program WinRAR bukanlah program yang

dijadikan pembanding utama, melainkan hanya diikut sertakan sebagai bahan

pertimbangan tambahan.

2.5.3 Compress

Compress adalah program kompresi yang menggunakan algoritma

kompresi LZC, yaitu sebuah modifikasi algoritma LZW yang menggunakan

pointer yang besarnya berubah-ubah. Algoritma yang digunakan dalam program

ini telah dipatenkan pada tahun 1983 oleh Sperry Research Center. Program ini

biasanya digunakan untuk mengopresi file-file tar pada lingkungan sistem operasi

UNIX. File hasil kompresi menggunakan Compress memiliki ekstensi .Z.

Page 27: BAB II TEKNIK KOMPRESI DATA - · PDF filesingkat tentang circular queue. ... Binary-search tree adalah sebuah pohon biner yang cabang sebelah kiri dari node A memiliki nilai yang lebih

31

Program Compress ini merupakan program pembanding utama karena

sama-sama menggunakan satu jenis kompresi seperti program LZSS yang penulis

gunakan.

2.5.4 Gzip

Gzip adalah suatu program kompresi yang dirancang untuk menggantikan

program kompresi Compress. Kelebihan Gzip dibandingkan dengan Compress

adalah dalam kinerja kompresinya dan tidak menggunakan algoritma yang telah

dipatenkan. Gzip dikembangkan oleh duet Jean-loup Gailly dan Mark Adler pada

tahun 1993. File hasil kompresi menggunakan Gzip memiliki ektensi .GZ. Gzip

lebih banyak digunakan dalam lingkungan sistem operasi UNIX dan varian-

variannya untuk mengopresi file-file tar.

Program Gzip menggunakan dua buah algoritma kompresi, yaitu algoritma

Shannon-Fano dan Huffman Coding.

2.5.5 Prediction by Partial Matching

Prediction by Partial Matching (PPM/PPMC) adalah sebuah teknik

adaptive statistical data compression yang berdasarkan pada context modelling

dan teknik prediksi. Model PPM menggunakan seperangkat simbol pada deretan

simbol yang belum dikompresi untuk memprediksikan deretan simbol selanjutnya

yang akan dikompresi.

Algoritma PPM ditemukan dan dikembangkan oleh John Cleary dan Ian

Witten. Selanjutnya, algoritma ini diimplementasikan menjadi suatu program

kompresi oleh Alistair Moffat pada bulan Juli tahun1987.

2.5.6 Pack

Program pack ini adalah sebuah program kompresi yang biasa digunakan

pada sistem operasi UNIX. Program ini menggunakan algoritma Huffman coding

dalam melakukan kompresi. Program ini merupakan salah satu program utama

Page 28: BAB II TEKNIK KOMPRESI DATA - · PDF filesingkat tentang circular queue. ... Binary-search tree adalah sebuah pohon biner yang cabang sebelah kiri dari node A memiliki nilai yang lebih

32

yang dijadikan acuan dalam benchmarking terhadap algoritma LZSS karena

sama-sama menggunakan sebuah algoritma dalam proses kompresinya.