• Tidak ada hasil yang ditemukan

BAB II TEKNIK KOMPRESI DATA

N/A
N/A
Protected

Academic year: 2022

Membagikan "BAB II TEKNIK KOMPRESI DATA"

Copied!
28
0
0

Teks penuh

(1)

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

(2)

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

(3)

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.

(4)

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.

(5)

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.

(6)

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:

(7)

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.

(8)

12 Data: “aababacbaacbaadaaa”

Tabel II-1. Proses pengkodean LZSS [8].

Input Buffer (search__look-ahead) Output aababacbaacbaadaaa aaaa 1a aababacbaacbaadaaa aaaa aaba 002

babacbaacbaadaaa aaaa baba 1b

abacbaacbaadaaa aaab abac 022

acbaacbaadaaa abab acba 1a

cbaacbaadaaa baba cbaa 1c

baacbaadaaa abac baac 012

acbaadaaa acba acba 004

adaaa acba adaa 1a

daaa cbaa daaa 1d

aaa baad aaa 012

a 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.

(9)

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”

(10)

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,

(11)

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

(12)

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.

(13)

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:

(14)

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”.

(15)

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.

(16)

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.

(17)

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:

(18)

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

(19)

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.

(20)

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

(21)

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.

(22)

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

(23)

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].

(24)

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.

(25)

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.

(26)

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.

(27)

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

(28)

32 yang dijadikan acuan dalam benchmarking terhadap algoritma LZSS karena sama-sama menggunakan sebuah algoritma dalam proses kompresinya.

Gambar

Gambar 2.1. Contoh proses encoding algoritma LZ77 [1].
Gambar 2.2. Pseudocode algoritma LZSS [8].
Gambar 2.3. Circular queueI [1] .
Tabel II-1. Proses pengkodean LZSS [8].
+7

Referensi

Dokumen terkait

Berdasarkan survei pendahuluan dari 20 sopir bus yang ada di Terminal Tirtonadi Surakarta baik sopir bus AKAP maupun sopir bus AKDP dengan menggunakan Nordic Body Map,

sanksi dalam hukum pidana dijatuhkan semata-mata karena orang telah melakukan kejahatan yang merupakan akibat mutlak yang harus ada sebagai suatu pembalasan kepada orang

Dengan demikian X 2 hitung lebih besar dari pada X 2 tabel, sehingga dapat dikatakan bahwa luas lahan yang dikelola mempunyai hubungan nyata dengan tingkat

Polimorfisme Asam Amino pada Amino Terminus Gen PB2 dari isolat Virus Avian Influenza H5N1 Asal Berbagai Spesies Hewan yang Diperoleh Langsung dari Penelitian ini dan Data

Pengambilan keputusan adalah pihak yang mengambil keputusan, yaitu antara contoh dengan pasangan selama contoh menyelesaikan program pascasarjana atau selama menjalani

Penelitian ini bertujuan untuk mengungkap asertivitas mahasiswa Program Studi Bimbingan dan Konseling angkatan 2016 serta memberi usulan topik bimbingan yang relevan

Selanjutnya dari wawancara yang dilakukan dengan peneliti, bapak Ahmad selaku WAKA Kurikulum menjelaskan secara rinci penilaian yang dilakukan oleh pihak sekolah

Enron memaksa karyawan dalam hal pengelolaan dana pensiun, dimana diharuskanpembelian saham perusahaan sebagai dana pensiun, karyawan percaya atas