ambigu chapter ii

27
BAB 2 TINJAUAN PUSTAKA 2.1 Data Data adalah keterangan yang benar dan nyata atau dengan kata lain adalah catatan atas kumpulan fakta yang mendeskripsikan simbol, grafik, gambar, kata, angka, huruf, objek ataupun kondisi. Data merupakan bentuk jamak dari datum, berasal dari bahasa latin yang artinya “sesuatu yang diberikan”. Data terkadang dipandang sebagai bentuk terendah dari informasi (Vardiansyah, D., 2008). Istilah data dan file silih berganti digunakan ataupun secara bersama-sama. File adalah pengarsipan dalam suatu media yang terdiri dari kumpulan karakter dan didokumentasikan dalam bentuk digital pada komputer. Sehingga, sering sekali istilah file ataupun data silih berganti digunakan untuk mengacu pada objek yang sama. Penggunaan istilah “data teks” atau “file teks” sama-sama mengacu kepada objek yang sama, perbedaan pengertian antara keduanya tersebut tidak begitu jelas. Namun, istilah data biasanya digunakan untuk mendeskripsikan apa yang menjadi isi suatu file. Berbagai jenis data antara lain: data gambar, data teks, data suara, dll. Di dalam ilmu komputer penggunaan istilah tipe data juga digunakan. Merupakan penjelasan bagaimana data disimpan ataupun diolah oleh komputer. Tipe data sederhana melingkupi integer, real, boolean, character. Tipe data sederhana majemuk melingkup i string. Struktur data melingkupi array dan record. Struktur data majemuk melingkup i stack, queque, list, multilist, pohon biner dan graph (Wahyudi, B., 2004). Pemakaian tipe data yang sesuai di dalam proses pemrograman akan menghasilkan algoritma yang jelas dan tepat, sehingga menjadikan program secara keseluruhan lebih efisien dan sederhana. Universitas Sumatera Utara

Upload: acuy-surya-ramdani

Post on 30-Jun-2015

154 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Ambigu Chapter II

BAB 2

TINJAUAN PUSTAKA

2.1 Data

Data adalah keterangan yang benar dan nyata atau dengan kata lain adalah catatan atas

kumpulan fakta yang mendeskripsikan simbol, grafik, gambar, kata, angka, huruf,

objek ataupun kondisi. Data merupakan bentuk jamak dari datum, berasal dari bahasa

latin yang artinya “sesuatu yang diberikan”. Data terkadang dipandang sebagai

bentuk terendah dari informasi (Vardiansyah, D., 2008).

Istilah data dan file silih berganti digunakan ataupun secara bersama-sama.

File adalah pengarsipan dalam suatu media yang terdiri dari kumpulan karakter dan

didokumentasikan dalam bentuk digital pada komputer. Sehingga, sering sekali istilah

file ataupun data silih berganti digunakan untuk mengacu pada objek yang sama.

Penggunaan istilah “data teks” atau “file teks” sama-sama mengacu kepada objek

yang sama, perbedaan pengertian antara keduanya tersebut tidak begitu jelas. Namun,

istilah data biasanya digunakan untuk mendeskripsikan apa yang menjadi isi suatu file.

Berbagai jenis data antara lain: data gambar, data teks, data suara, dll.

Di dalam ilmu komputer penggunaan istilah tipe data juga digunakan.

Merupakan penjelasan bagaimana data disimpan ataupun diolah oleh komputer. Tipe

data sederhana melingkupi integer, real, boolean, character. Tipe data sederhana

majemuk melingkupi string. Struktur data melingkupi array dan record. Struktur data

majemuk melingkupi stack, queque, list, multilist, pohon biner dan graph (Wahyudi,

B., 2004).

Pemakaian tipe data yang sesuai di dalam proses pemrograman akan

menghasilkan algoritma yang jelas dan tepat, sehingga menjadikan program secara

keseluruhan lebih efisien dan sederhana.

Universitas Sumatera Utara

Page 2: Ambigu Chapter II

2.2 Kompresi Data

Teori Informasi adalah cabang ilmu matematika yang melibatkan penghitungan

informasi, memperlihatkan bagaimana cara untuk mengukur informasi. Sebuah

penelitian yang dipublikasikan tahun 1948 oleh Claude E. Shannon dengan judul “A

mathematical theory of communication” menjadi asal mula lahirnya Teori Informasi.

Sedangkan teori kompresi mengacu kepada Teori Informasi sebagai landasan dasar

teori.

Solomon, D. (2007, hal: 2) mengemukakan definisi kompresi data adalah

proses yang mengkonversi sebuah masukan berupa aliran data (the source atau data

asli mentah) menjadi suatu aliran data lain (the output, aliran bit, atau aliran sudah

dikompres) yang memiliki ukuran lebih kecil. Aliran data (stream) dapat berupa

sebuah file atau buffer pada memori. Data dalam konteks kompresi data melingkupi

segala bentuk digital dari informasi, yang dapat diproses oleh sebuah program

komputer. Bentuk dari informasi tersebut secara luas dapat diklasifikasikan sebagai

teks, suara, gambar dan video.

2.2.1 Konsep

Kompresi data memungkinkan sebuah data dengan suatu metode dapat

direpresentasikan ke dalam bentuk yang memiliki bit-bit (satuan terkecil pembentuk

data) lebih kecil, dikenal dengan istilah encoding. Sebaliknya, dekompresi data juga

memungkinkan wujud “representasi” tersebut dikembalikan ke wujud semula, dikenal

dengan istilah decoding. Bagian algoritma yang melakukan encoding dinamakan

encoder dan yang melakukan decoding dinamakan decoder.

Suatu algoritma kompresi memiliki fungsi encoding dan decoding sekaligus.

Namun pada implementasinya, implementor-lah yang menentukan bagian encoder

ataukah decoder yang menentukan aksi encoding atau decoding yang dipilih dan

diterapkan terhadap suatu data.

Universitas Sumatera Utara

Page 3: Ambigu Chapter II

Gambar 2.1 Proses encoding dan decoding (Pu, I. M., 2006)

Konsep utama dalam kompresi terletak pada eliminasi redudansi. Hal ini

secara tidak sadar dimanfaatkan dalam kehidupan sehari-hari, contohnya adalah

penggunaan singkatan dalam tulisan. Kita sudah tidak asing dengan penggunaan “&”

sebagai pengganti kata “dan”, “yg” sebagai pengganti kata “yang” dan “cth” sebagai

pengganti kata “contoh”. Permasalahan dalam kompresi data adalah bagaimana

menemukan metode yang efisien untuk menghilangkan redundansi dari berbagai tipe

data serta metode untuk membentuk kembali wujud semula.

Misal S = (s1, s2, …, sn) adalah himpunan alfabet dari data/file. Representasi

digital dari simbol-simbol himpunan tersebut dinamakan code C = (c1, c2, …, cn) dan

setiap simbol tersebut dinamakan codeword. Bentuk representasi dasar dari data

adalah American Standard Code for Information Interchange (ASCII) terdiri atas

sebuah himpunan yang memiliki panjang tetap (fixed length) untuk setiap codeword

(yaitu 8 bit). Dalam kompresi data, setiap panjang dari codeword tersebut diubah

dengan panjang yang tidak tetap (variable length).

Tabel 2.1 Perbandingan kode fixed length dengan variable length

Representasi

Simbol

Kode ASCII

(fixed length)

Jumlah

bit

Prefix Code

(variable length)

Jumlah

bit

A 0100 0001 8 0 1

B 0100 0010 8 100 3

C 0100 0011 8 101 3

D 0100 0100 8 110 3

E 0100 0101 8 111 3

Kompresi

Dekompresi

Input Original Data/File

Input Coded Data/File

Output Coded Data/File

Output Original Data/File

Universitas Sumatera Utara

Page 4: Ambigu Chapter II

2.2.2 Klasifikasi Algoritma Kompresi

Dalam kompresi data, tidak ada algoritma yang cocok untuk semua jenis data. Hal ini

disebabkan karakteristik dan pola susunan tiap data berbeda-beda. Berbagai model

matematika dalam menemukan redundansi dalam data tertentu menyebabkan

munculnya aneka ragam algoritma kompresi data.

Terdapat dua golongan besar pada teknik (algoritma) kompresi ketika

berhadapan dengan kemungkinan dalam merekonstruksi kembali data yang telah

dikompres menjadi data original, yaitu kompresi Lossless dan Lossy.

a. Kompresi Lossless

Algoritma kompresi tergolong lossless jika memungkinkan data yang sudah

dikompres dapat direkonstruksi kembali persis sesuai dengan data original.

Teknik ini menjamin tidak ada kehilangan sedikitpun detil atau kerusakan pada

data. Contoh data yang cocok adalah gambar medis, teks, program, spreadsheet

dan lain-lain. Adapun beberapa algoritma yang tergolong dalam jenis ini adalah

algoritma Deflate, Run Length Coding, Huffman, LZW, dan Arithmetic Coding.

Gambar 2.2 Algoritma kompresi Lossless (Pu, I. M., 2006)

b. Kompresi Lossy

Algoritma kompresi tergolong lossy jika tidak memungkinkan data yang sudah

dikompres dapat direkonstuksi kembali persis sesuai dengan data original.

Kehilangan detil-detil yang tidak berarti dapat diterima pada waktu proses

kompresi. Hal ini memanfaatkan keterbatasan panca indera manusia. Maka,

sebuah perkiraan yang mendekati keadaan original dalam membangun kembali

data merupakan hal yang diperlukan untuk mencapai keefektifan kompresi.

Algoritma Kompresi AABBBA 000001101101100

Algoritma Dekompresi 000001101101100

AABBBA

Universitas Sumatera Utara

Page 5: Ambigu Chapter II

Contoh data yang cocok adalah gambar, suara dan video. Adapun beberapa

algoritma yang tergolong dalam jenis ini adalah algoritma Wavelet Compression,

CELP, JPEG, MPEG-1 dan WMA.

Gambar 2.3 Algoritma kompresi Lossy (Pu, I. M., 2006)

Kompresi Lossless umumnya diimplementasikan menggunakan salah satu dari

dua jenis pemodelan yang berbeda, yaitu berdasarkan statistik atau dictionary. Basis

statistik menciptakan himpunan codeword baru untuk tiap-tiap simbol berdasarkan

probabilitas kemunculan simbol. Basis dictionary menggunakan suatu pengkodean

sebagai pengganti dari sekumpulan simbol (Nelson, M. et al, 1996).

a. Algoritma kompresi berbasis statistik

Algoritma kompresi berbasis statistik, atau disebut juga berbasis Entropy,

umumnya memiliki konsep memberikan panjang codeword lebih pendek kepada

simbol dengan probabilitas kemunculan yang lebih tinggi. Hal sebaliknya berlaku

kepada simbol dengan probabilitas kemunculan yang lebih rendah. Contoh

algoritma kompresi berbasis statistik adalah Algoritma Huffman, Adaptive

Huffman, Shannon Fano, Arithmetic dan lain-lain.

b. Algoritma kompresi berbasis dictionary

Algoritma kompresi berbasis dictionary umumnya membandingkan pola bagian

data yang akan diproses dengan bagian data yang sudah diproses sebelumnya.

Kemudian menggunakan kode sebagai tanda pengenal yang merujuk kepada pola

perulangan. Contoh algoritma kompresi berbasis dictionary adalah algoritma

varian Lempel-Ziv (LZ), Deflate dan lain-lain.

Algoritma Kompresi 3.1415926 0001100111001

Algoritma Dekompresi 0001100111001

3.14

Universitas Sumatera Utara

Page 6: Ambigu Chapter II

Algoritma Deflate adalah algoritma kompresi jenis lossless dengan basis

gabungan antara dictionary dan statistik. Hal ini disebabkan algoritma Deflate itu

sendiri adalah kombinasi antara algoritma LZ77 dan Huffman. Mengambil kelebihan

dari masing-masing metode, sliding-window pada metode LZ77 dan prefix-tree yang

dimiliki metode Huffman menjadikan performa algoritma Deflate layak dibandingkan

dengan berbagai metode kompresi terbaik (Deutsch, L. P. 1996a).

2.3 Algoritma LZ77

Penelitian pada kompresi data hingga tahun 1977 berkonsentrasi kepada cara-cara

mengembangan metode Huffman. Segalanya berubah pada tahun tersebut. Publikasi

“A Universal Algorithm for Sequential Data Compression” oleh Jacob Ziv dan

Abraham Lempel mengemukakan metode baru, yaitu metode berbasis dictionary.

Teknik kompresi yang dikembangkan dalam dokumen tersebut bernama Lempel-Ziv

77 (LZ77). Algoritma LZ77 adalah teknik “sliding window” dimana menggunakan

teks yang dilihat sebelumnya sebagai dictionary terhadap teks yang akan diproses

(Nelson, M. et al, 1996).

Algoritma ini menetapkan sebuah jendela (window). Rangkaian input

(masukan) akan bergerak dari arah kanan ke kiri pada jendela. Atau dengan sudut

pandang lain, jendela ini bergerak dari arah kiri ke kanan terhadap teks. Jendela

tersebut dibagi atas dua bagian. Bagian sebelah kiri dinamakan search buffer, sebagai

dictionary yang berisi rangkaian simbol yang sudah diproses. Bagian sebelah kanan

dinamakan look-ahead buffer, berisi rangkaian simbol sebagai input yang akan

diproses. Ukuran dari masing-masing buffer dalam implementasi boleh jadi bervariasi.

Memperluas area pencarian (search buffer) memungkinkan algoritma mencari

rangkaian simbol terpanjang yang sesuai dengan masukan (look-ahead buffer).

Memperluas area masukan berarti memungkinkan panjang rangkaian simbol yang

mungkin sesuai semakin besar. Namun, umumnya search buffer berukuran 2-8 Kbytes

dan look-ahead buffer berukuran 8-32 bytes.

Universitas Sumatera Utara

Page 7: Ambigu Chapter II

Gambar 2.4 Sliding Window (Salomon, D, 2007)

2.3.1 Encoder

Encoder melakukan pembacaan pada search buffer dari arah kanan ke kiri. Mencari

simbol yang sesuai dengan simbol pertama pada look-ahead buffer, yaitu “i” pada

gambar 2.4. Simbol pertama dijumpai pada jarak 20 simbol dari ujung search buffer

(offset). Encoder kemudian berusaha mencocokkan rangkaian simbol. Di sini panjang

rangkaian (length) yang sesuai adalah 6 (“input”). Pencarian berlanjut terus menerus

hingga search buffer semuanya berhasil ditelusuri. Simbol kedua dijumpai pada offset

26 dengan panjang rangkaian (length) yang sesuai adalah 6 (“input”). Oleh karena

penelururan telah selesai, encoder mencari nilai length terbesar dan offset terkecil.

Simbol “p” dicatat sebagai code, yaitu simbol pertama yang tepat berada disebelah

kanan rangkaian simbol yang sesuai (“input”) di look-ahead buffer. Encoder

kemudian menghasilkan token (20, 6, p).

Proses kemudian kembali berulang dengan menggeser sliding window

sebanyak length+1 simbol terhadap teks. Maka, search buffer akan berisi

“nputdeflatedalaminputp” dan look-ahead buffer berisi “rosesdeflat“. Jika

dalam pencarian tidak terdapat simbol yang sesuai atau jika simbol yang sesuai hanya

1, maka dihasilkan token (0, 0, code).

Gambar 2.5 Cara Kerja Algoritma Encoder LZ77

Terdapat suatu keunikan dalam menghasilkan token, kemampuan untuk

seakan-akan memakai sebagian dari look-ahead buffer sebagai search buffer. Pada

gambar 2.5, token yang dihasilkan seharusnya (4, 4, a). Ternyata encoder

amadimenanggapiamanamanatpresiden … Rangkaian simbol yang akan dibaca

inputinputdeflatedalaminputproses ...upakan deflatingdaninflatin...

search buffer look-ahead buffer

Sliding Window

Rangkaian simbol yang akan dibaca

Universitas Sumatera Utara

Page 8: Ambigu Chapter II

menghasilkan token (4, 5, t). Dengan ukuran length 5 berarti secara paksa melewati

batas pemisah jendela. Jika didapati dictionary “…aman” dengan token (4, 5, t) akan

menghasilkan rangkaian “amanat”. Hal ini dilakukan untuk efektifitas kompresi.

Teknik ini sangat berguna bila didapati pengulangan yang tergolong cukup banyak.

Contoh, dictionary “…A” dengan token (1, 10, R) akan menghasilkan rangkaian

“AAAAAAAAAAR”.

Perlu diperhatikan, bahwa nilai length mempunyai batas maksimum panjang

look-ahead buffer – 1, atau L-1. Ini dapat kita pahami dengan memperhatikan bentuk

susunan sebuah token (f, l, c). Keberadaan code c tentunya mengurangi kemungkinan

panjang rangkaian simbol yang sesuai dari look-ahead buffer 1 simbol.

Tabel 2.2 Algoritma Encoder LZ77 (Pu, I. M, 2006)

Baris Pseudo code 1 p 1; 2 While not EOF do

3

Temukan rangkaian yang cocok terpanjang sebanyak l bytes dari look-ahead buffer S[p...L-1] di search buffer S[p-B...(p-1)] dimana karakter yang cocok pertama adalah S[m];

4 Output token (p-m, l, S[p+l]); 5 p p + l + 1; 6 End While;

Keterangan:

1. S[1..n] sebagai Source Input.

2. Rangkaian token (f, l, c) sebagai Output.

3. p adalah posisi pointer yang menunjuk pada awal look-ahead buffer.

4. L adalah panjang look-ahead buffer.

5. B adalah panjang search buffer.

6. l adalah panjang rangkaian simbol yang cocok.

7. m adalah posisi yang menunjuk pada karakter pertama yang cocok pada Source

Input.

8. EOF adalah singkatan dari End of File, merupakan tanda akhir isi source input.

Universitas Sumatera Utara

Page 9: Ambigu Chapter II

2.3.2 Decoder

Decoder memiliki buffer dengan ukuran yang sama dengan Encoder, dimana hanya

memiliki jendela Dictionary. Decoder bekerja membaca rangkaian token. Jika token

merupakan representasi rangkaian simbol sepanjang l, maka Decoder akan membaca

posisi offset f dan menulis sebanyak l simbol ke output. Jika token merupakan

representasi simbol ASCII-token (0, 0, c), maka Decoder akan menulis simbol c

tersebut ke output.

Gambar 2.6 Cara Kerja Algoritma Decoder LZ77

Gambar 2.6 menjelaskan bagaimana menerjemahkan token-token menjadi

output. Token (0, 0, ) menghasilkan “” (spasi), dimana hasil output masih berada

dalam jendela dictionary. Isi dari jendela dictionary digeser sebanyak nilai offset + 1,

atau f + 1. Operasi tersebut menghasilkan bentuk sesuai poin 2 Gambar 2.6. Token (4,

5, t) menghasilkan “amanat” dimana jika diperhatikan nilai length lebih besar dari

nilai offset. Bagaimana Decoder mampu menerjemahkan token ini adalah terletak

pada detil cara kerjanya. Decoder tidak bekerja dengan menyalin secara langsung

keseluruhan l simbol dari offset ke output, namun bekerja menerjemahkan satu simbol

demi satu simbol.

Tabel 2.3 Algoritma Decoder LZ77 (Pu, I. M, 2006)

Baris Pseudo code 1 p 1; 2 While not EOF do 3 Baca token berikutnya; 4 S[p...(p+l-1) S[(p-f)...(p-f+l-1)]; 5 S[p+l] c; 6 p p + l + 1; 7 End While;

Apabilaamadimenanggapi (0, 0, ) …dral.

pabilaamadimenanggapi (17, 3, n) …dral. A

(1)

laamadimenanggapiaman (4, 5, t) …dral. Apabi (2)

dimenanggapiamanamanat …dral. Apabilaama

(3)

(0, 0, ) (4)

Universitas Sumatera Utara

Page 10: Ambigu Chapter II

Keterangan:

1. Rangkaian token (f, l, c) sebagai Input.

2. S[1..n] sebagai Source Output.

3. p adalah posisi pointer yang menunjuk pada awal Dictionary.

4. l adalah panjang rangkaian simbol yang cocok.

5. f adalah offset, posisi yang menunjuk karakter pertama dari sisi kanan Dictionary.

2.4 Algoritma Huffman

Semenjak penelitian David A. Huffman “A Method for the Construction of Minimum

Redundancy Codes” dipublikasikan tahun 1952, metode yang dikembangkannya

menjadi konsentrasi banyak penelitian dalam jumlah yang besar. Teknik kompresi

yang dikembangkan dalam dokumen tersebut bernama Huffman dan berbasis statistik.

Algoritma Huffman adalah teknik “prefix-tree” dimana menggunakan sebuah pohon

biner guna menghasilkan kode pengganti yang optimal bagi simbol-simbol dengan

probabilitas kemunculan yang lebih tinggi (Sayood, K, 2003).

Letak keberhasilan kompresi dengan metode ini adalah menerapkan variable

length gantinya fixed length. Misal pada representasi ASCII, sebuah karakter disimpan

dengan ukuran seragam 8 bit. Dengan menerapkan variable length, maka simbol yang

memiliki probabilitas kemunculan yang lebih tinggi diberi codeword dengan ukuran

lebih kecil.

Untuk mencapai maksud tersebut, algoritma ini mengkonstruksi pohon biner

yang dinamakan “prefix-tree” atau pohon Huffman. Dinamakan demikian oleh karena

tidak ada codeword yang dihasilkan merupakan awalan dari codeword lainnya. Hal itu

menjamin keunikan dari masing-masing kode sehingga proses dekompresi tidak

ambigu.

Algoritma huffman akan menggunakan “prefix-tree” dalam melakukan

pembentukan kode-kode huffman. Kode inilah yang akan menggantikan setiap byte

pada data. “prefix-tree” ini jugalah yang akan digunakan untuk menerjemahkan

kembali byte data semula.

Universitas Sumatera Utara

Page 11: Ambigu Chapter II

2.4.1 Encoder

Dalam proses kompresi, Encoder terlebih dahulu membaca keseluruhan source input,

membentuk tabel frekwensi, menciptakan pohon huffman dan kemudian memperoleh

kode huffman untuk tiap simbol. Kode huffman tersebut digunakan dalam melakukan

proses encoding terhadap source input.

Dalam pembentukan pohon huffman, sebuah daftar atau tabel simbol dibentuk

dan diurutkan berdasarkan nilai probabilitas kemunculannya. Daftar tersebut

dinamakan ordered list. Simbol-simbol dalam daftar berulang kali dikombinasikan

dengan simbol ataupun subtree lainnya, 2 simbol atau node dikombinasikan untuk

membentuk sebuah node baru yang merupakan sebuah subtree. Pohon akan

berkembang setiap kombinasi terjadi sampai akhirnya menghasilkan root.

Perulangan dalam pembentukan pohon Huffman:

1. Kombinasikan 2 simbol terakhir pada daftar (probabilitas kemunculan terendah)

dan diganti dengan simbol representasi pengganti.

2. Simbol representasi pengganti yang menggambarkan sebuah subtree, ditempatkan

berdasarkan nilai gabungan dari probabilitas kemunculan kedua simbol.

Beberapa aturan pembentukan pohon Huffman:

1. Simbol asli berada pada daun.

2. Node adalah hasil kombinasi, apakah menggunakan simbol asli atau simbol

representasi pengganti atau keduanya.

3. Node diberi bobot dengan nilai penjumlahan nilai probabilitas kemunculan kedua

cabangnya.

4. Node boleh diberi simbol representasi pengganti kombinasi dari simbol cabang.

5. Cabang sebelah kiri diberi bobot dengan nilai 0 dan sebelah kanan 1.

6. Simbol representasi pengganti yang baru diurutkan dalam daftar dengan posisi

teratas jika didapati nilai probabilitas kemunculan yang sama.

7. Representasi pengganti gabungan terakhir pada daftar dianggap sebagai root.

Universitas Sumatera Utara

Page 12: Ambigu Chapter II

Andaikata sebuah string “JIKA DIA AKUI DIRINYA” sebagai source input,

algoritma Huffman pertama sekali melakukan penghitungan untuk tiap simbol-simbol

yang ada. Dimulai dari simbol pertama yaitu “J”, bergerak secara sekuensial ke indeks

berikutnya, yaitu “I”. Setiap ditemukan simbol baru yang tidak ada pada daftar, maka

simbol tersebut akan ditambahkan dengan memberikan nilai probabilitas awal 1.

Sebaliknya, jika ditemukan simbol yang sudah ada pada daftar, nilai probabilitasnya

cukup ditambah 1. Setelah mencapai indeks terakhir, tabel 2.4 adalah tabel frekwensi

dan ordered list yang dihasilkan.

Tabel 2.4 Daftar Simbol Dan Probabilitas

Simbol Dan Probabilitas Awal

Simbol Dan Probabilitas Yang Diurutkan

J 1 I 5 I 5 A 4 K 2 _ (spasi) 3 A 4 K 2

_ (spasi) 3 D 2 D 2 J 1 U 1 U 1 R 1 R 1 N 1 N 1 Y 1 Y 1

Penggabungan pertama sekali dilakukan pada simbol N dan Y dengan simbol

representasi baru (NY), kedua pada simbol U dan R dengan simbol representasi baru

(UR) dan ketiga pada simbol D dan J dengan simbol representasi baru (DJ). Hasil

penggabungan tersebut tampak pada gambar 2.7 dan keadaan Ordered List tahap demi

tahap tampak pada tabel 2.5.

Gambar 2.7 Pembentukan Pohon Huffman Tahap 1, 2 dan 3

D J U R 2 1 1 1

2 3

N Y 1 1

2 0 0 0 1 1 1

A 4

I 5

_

3

Universitas Sumatera Utara

Page 13: Ambigu Chapter II

Tabel 2.5 Ordered List Awal, Tahap 1, Tahap 2 dan Tahap 3

Ordered List Awal

Ordered List Tahap 1

Ordered List Tahap 2

Ordered List Tahap 3

I 5 I 5 I 5 I 5 A 4 A 4 A 4 A 4 _ 3 _ 3 _ 3 (DJ) 3 K 2 (NY) 2 (UR) 2 _ 3 D 2 K 2 (NY) 2 (UR) 2 J 1 D 2 K 2 (NY) 2 U 1 J 1 D 2 K 2 R 1 U 1 J 1 N 1 R 1 Y 1

Penggabungan keempat dilakukan pada simbol (NY) dan K dengan simbol

representasi baru ((NY)K), kelima pada simbol _ dan (UR) dengan simbol

representasi baru (_(UR)) dan keenam pada simbol A dan (DJ) dengan simbol

representasi baru (A(DJ)). Hasil penggabungan tersebut tampak pada gambar 2.8 dan

keadaan Ordered List tahap demi tahap tampak pada tabel 2.6.

Gambar 2.8 Pembentukan Pohon Huffman Tahap 4, 5 dan 6

Tabel 2.6 Ordered List Tahap 4, Tahap 5 dan Tahap 6

Ordered List Tahap 4

Ordered List Tahap 5

Ordered List Tahap 6

I 5 (_(UR)) 5 (A(DJ)) 7 ((NY)K) 4 I 5 (_(UR)) 5

A 4 ((NY)K) 4 I 5 (DJ) 3 A 4 ((NY)K) 4

_ 3 (DJ) 3 (UR) 2

_

U R

3

1 1

2

5 0

0

1 I 5

A

D J

4

2 1

3

7 0

0

1

1

4

K 2

N Y 1 1

2

0

0

1

1 1

Universitas Sumatera Utara

Page 14: Ambigu Chapter II

Penggabungan ketujuh dilakukan pada simbol I dan ((NY)K) dengan simbol

representasi baru (I((NY)K)), kedelapan dilakukan pada simbol (A(DJ)) dan (_(UR))

dengan simbol representasi baru ((A(DJ))(_(UR))). Hasil penggabungan tersebut

tampak pada gambar 2.9 dan keadaan Ordered List tahap demi tahap tampak pada

tabel 2.7.

Gambar 2.9 Pembentukan Pohon Huffman Tahap 7 dan 8

Tabel 2.7 Ordered List Tahap 7 dan Tahap 8

Ordered List

Tahap 7

Ordered List

Tahap 8

(I((NY)K) 9 ((A(DJ)) (_(UR))) 12

(A(DJ)) 7 (I((NY)K) 9

(_(UR)) 5

Setelah mencapai tahap 8, pada Ordered List hanya didapati 2 simbol, yaitu

((A(DJ)) (_(UR))) dan (I((NY)K)). Penggabungan terhadap 2 simbol itu kemudian

dilakukan dan menyisakan hanya 1 simbol pada daftar yang terbaru. Ketika Encoder

membaca dan mendapati hanya satu simbol yang berada pada daftar, yaitu

representasi simbol (((A(DJ)) (_(UR)))(I((NY)K))), maka proses pembentukan pohon

Huffman selesai. Hasil akhir tampak pada gambar 2.10.

I

A _

D J U R

5

4 3

2 1 1 1

2 3

4

K 2

N Y 1 1

2

5 7

9 12 0

0

0

0

0

0

0

0

1

1

1 1

1 1

1

1

Universitas Sumatera Utara

Page 15: Ambigu Chapter II

Gambar 2.10 Prefix-tree

Kode huffman didapati dengan menelusuri pohon huffman yang terbentuk.

Cabang sebelah kiri diberi bobot 0 dan cabang sebelah kanan diberi bobot 1. Dimulai

dari root hingga mencapai daun, rangkaian bobot cabang 1 dan 0 yang dilewati

merupakan kode huffman bagi simbol atau daun yang dituju.

Dengan menggunakan representasi ASCII, string “JIKA DIA AKUI

DIRINYA” akan memerlukan penyimpanan sebesar 21 * 8 bit = 168 bit. Dengan

menggunakan representasi kode Huffman, string tersebut berhasil dikompresi menjadi

“0011 10 111 000 010 0010 10 000 010 000 111 0110 10 010 0010 10 0111 10 1100

1101 000” yang memerlukan penyimpanan sebesar 65 bit.

Tabel 2.8 Kode Huffman

Simbol Kode

Huffman

Jumlah bit Simbol Kode

Huffman

Jumlah bit

A 000 3 R 0111 4

D 0010 4 I 10 2

J 0011 4 N 1100 4

_ (spasi) 010 3 Y 1101 3

U 0110 4 K 111 3

I

A _

D J U R

5

4 3

2 1 1 1

2 3

4

K 2

N Y 1 1

2

5 7

9 12

21 0

0

0

0

0

0

0

0

0

1

1

1

1 1

1 1

1

1

Universitas Sumatera Utara

Page 16: Ambigu Chapter II

Tabel 2.9 Algoritma Encoder Huffman (Pu, I. M, 2006)

Baris Pseudo code

1 Deklarasi list yang berisi daftar simbol/tree (t1,

t2, ..., tn)

dengan bobot (w1, w2, ..., wn) berturut-turut;

2 for k = 1; k < n; k + 1 do

3 Ambil 2 tree terbawah ti dan tj, wi ≥ wj {bobot

terkecil};

4 t merge(ti, tj);

5 w wi + wj;

6 left_child(t) ti dan right_child(t) tj;

7 edge(t, ti) 0; edge(t, tj) 1;

9 end for;

10 Output codeword dengan menelururi dari root ke

daun;

Keterangan:

1. Pembacaan source input dari awal hingga akhir menghasilkan daftar simbol

sebanyak n buah(t1, t2, ..., tn)beserta probabilitas kemunculan untuk tiap

simbol itu (w1, w2, ..., wn).

2. Codeword yang dihasilkan adalah kode Huffman. Digunakan untuk

mengkompresi source input.

2.4.2 Decoder

Decoder bekerja dengan membaca bit demi bit dan menggunakannya dalam

menelusuri pohon Huffman hingga menemukan simbol. Dimulai dari root kita

menelusuri cabang yang ada di bawah berdasarkan nilai bit. Jika bit yang sedang

dibaca adalah 0, maka akan dipilih cabang sebelah kiri (left_child). Sebaliknya, bit 1

akan menelusuri cabang sebelah kanan (right_child). Setiap node yang ditelusuri akan

diperiksa, apakah sudah mencapai ujung dari pohon tersebut. Jika benar, proses

pembacaan 1 simbol selesai. Simbol yang berada di ujung pohon tersebut akan

diproses sebagai output. Decoder kemudian melanjutkan pemembacaan bit demi bit

Universitas Sumatera Utara

Page 17: Ambigu Chapter II

berikutnya dan mengulang langkah-langkah penelusuran pohon Huffman. Proses

dekompresi akan berakhir jika didapati tanda EOF.

Dengan menggunakan pohon Huffman pada gambar 2.10, penerjemahan

rangkaian bit “011110” digambarkan dalam langkah-langkah berikut:

1. Dimulai dari root.

2. Baca bit 0, berpindah ke cabang kiri. Node bukan ujung pohon.

3. Baca bit 1, berpindah ke cabang kanan. Node bukan ujung pohon.

4. Baca bit 1, berpindah ke cabang kanan. Node bukan ujung pohon.

5. Baca bit 1, berpindah ke cabang kanan. Node adalah ujung pohon dengan output

simbol R.

6. Dimulai dari root.

7. Baca bit 1, berpindah ke cabang kanan. Node bukan ujung pohon.

8. Baca bit 0, berpindah ke cabang kiri. Node adalah ujung pohon dengan output

simbol I.

Tabel 2.10 Algoritma Decoder Huffman (Pu, I. M, 2006)

Baris Pseudo code 1 p root; 2 while not EOF 3 Baca bit berikutnya b; 4 if b = 0 then 5 p left_child(p); 6 Else 7 p right_child(p); 8 end if; 9 if p = daun then {ujung pohon, leave) 10 Output: p; 11 p root; 12 end if; 13 end while;

Keterangan:

1. Source input berbentuk binary.

2. Source output berbentuk simbol original.

Universitas Sumatera Utara

Page 18: Ambigu Chapter II

2.5 Spesifikasi Algoritma Deflate

Algoritma Deflate adalah algoritma yang dikembangkan oleh Phil Katz. Algoritma

tersebut masih dalam bentuk spesifikasi yang kemudian oleh L. Peter Deutsch

dituangkan dalam publikasi dengan judul “DEFLATE Compressed Data Format

Specification”. Algoritma ini dirancang berdasarkan algoritma LZ77 yang

dikombinasikan dengan algoritma Huffman. Data yang sudah dikompres dengan

algoritma ini terdiri dari rangkaian blok. Ukuran dari blok tersebut tidak tetap, kecuali

blok yang berisi data tidak dikompres dibatasi dengan ukuran 65.535 bytes. Blok-blok

tersebut dikompres menggunakan kombinasi algoritma LZ77 dan Huffman.

Dalam mencari rangkaian simbol yang sesuai (metode LZ77), algoritma

Deflate memiliki kemampuan untuk melakukan pencarian secondary. Hal ini

bertujuan untuk mengoptimalkan length rangkaian simbol yang sesuai.

Gambar 2.11 Secondary Search

Dengan melihat gambar 2.11, length rangkaian simbol yang sesuai bernilai 4.

Namun, encoder akan menunda pemrosesan lebih lanjut dan melakukan secondary

search dengan karakter kedua pada lookahead buffer sebagai awal rangkaian simbol

yang akan dicocokkan. Ternyata length baru yang didapat bernilai 6 untuk string

“apume”. Encoder kemudian akan menjadikan simbol “s” sebagai output

dibandingkan token, bila pencarian yang kedua yang dipakai. Hal inilah yang disebut

dengan secondary search. Ada 3 metode yang dihasilkan dengan memodifikasi

karakteristik secondary search, yaitu high-compression, normal dan fast. Dengan

pilihan metode high-compression, akan dilakukan pencarian sekunder secara

maksimal. Pilihan metode normal akan melakukan pencarian sekunder secukupnya.

Pilihan metode fast akan melakukan pencarian sekunder seminimal mungkin bahkan

tidak ada sama sekali. Implementasi secondary search ini sepenuhnya diserahkan

kepada implementor.

, sapudikadapumembelisapumerah Rangkaian simbol yang akan dibaca …

Universitas Sumatera Utara

Page 19: Ambigu Chapter II

Di dalam algoritma “asli” LZ77 sebuah token diharuskan mengandung tiga

unsur, yaitu offset, length dan karakter. Sehingga apabila yang dihasilkan adalah token

(0, 0, c), maka penyimpanan yang dibutuhkan jauh lebih besar daripada ukuran satu

karakter (8 bit). Yang artinya penerjemahan bentuk token tersebut dalam bentuk bit

adalah sebuah pemborosan. Algoritma Deflate memperbaiki kelemahan ini dengan

cara menjadikan karakter asli tersebut sebagai output. Karakter demikian yang tidak

ditemukan kesesuaiannya disebut literal. Bagian data yang terkompresi terdiri atas

literal, distance (offset, pada algoritma LZ77) dan length, dimana Encoder akan

menuliskan kode Huffman untuk ketiga unsur itu. Kode Huffman dihasilkan dengan

menggunakan dua tabel, satu tabel untuk literal dan length, satu lagi untuk distance.

Masing-masing blok dimulai dengan 3 bit pendahulu, 1 bit BFINAL yang

berisi 1 jika blok tersebut adalah blok terakhir dalam data yang terkompresi dan 2 bit

BTYPE yang menentukan bagaimana cara kompresi dilakukan. Bagian berikutnya

adalah pohon Huffman yang bersifat independen atau unik terhadap blok-blok

lainnya. Selanjutnya adalah bagian data yang sudah dikompres. Bagian tersebut berisi

referensi-referensi kepada rangkaian simbol yang sesuai. Referensi tersebut

direpresentasikan atas pasangan <length, backward distance>. Representasi yang

digunakan dalam algoritma Deflate membatasi distance dengan ukuran 32 Kbytes

(walaupun melewati jangkauan satu blok) dan length dengan ukuran 258 bytes, namun

tidak membatasi ukuran blok kecuali yang berisi data tidak dikompres.

Ada 3 cara kompresi yang dapat dilakukan. Sesuai dengan kemungkinan nilai

BTYPE:

1. 00 - Tidak ada kompresi.

2. 01 - Kompresi dengan kode Huffman yang sudah ditentukan.

3. 10 - Kompresi dengan kode Huffman yang dinamis.

2.5.1 Tidak Ada Kompresi (BTYPE 00)

Blok yang menggunakan cara ini tidak akan melakukan kompresi. Hal ini dapat

dimengerti jika terdapat file-file yang tidak dapat dikompres atau sudah pernah

dikompres atau dengan alasan untuk memecah file tanpa kompresi. Pemecahan

Universitas Sumatera Utara

Page 20: Ambigu Chapter II

tersebut sangat berguna jika seorang pengguna ingin memindahkan 8 GB data dengan

menggunakan hanya 2 DVD berkapasitas 4.5 GB.

Cara ini tidak menggunakan tabel apapun. Sebuah blok ditulis dengan cara ini

akan didahului 1 byte yang menyatakan blok tidak menggunakan kompresi, diikuti 2

bytes LEN, 2 bytes komplemen LEN dan literal sebanyak LEN bytes. Cara ini dibatasi

dengan ukuran LEN yang merepresentasikan 65.535 bytes literal.

2.5.2 Kompresi Dengan Kode Huffman Yang Sudah Ditentukan (BTYPE 01)

Dua buah tabel telah menjadi kesatuan dan tertanam dalam encoder dan decoder. Hal

ini akan mempercepat proses kompresi namun memiliki kelemahan jika tabel yang

digunakan ternyata sangat berbeda dengan daftar simbol secara statistik. Literal dan

length ditempatkan dalam tabel pertama dan distance pada tabel kedua.

Tabel 2.11 EDOC literal dan length (Deutsch, L. P. 1996a)

Kode Bit ekstra

length Kode Bit ekstra

length Kode Bit ekstra

length

257 0 3 267 1 15, 16 277 4 67-82 258 0 4 268 1 17, 18 278 4 83-98 259 0 5 269 2 19-22 279 4 99-114 260 0 6 270 2 23-26 280 4 115-130 261 0 7 271 2 27-30 281 5 131-162 262 0 8 272 2 31-34 282 5 163-194 263 0 9 273 3 34-52 283 5 195-225 264 0 10 274 3 43-50 284 5 227-257 265 1 11, 12 275 3 51-58 285 0 258 266 1 13, 14 276 3 59-66

Tabel 2.12 Kode Huffman Untuk EDOC (Deutsch, L. P. 1996a)

EDOC bit Kode prefix

0-143 8 00110000–10111111

144-255 9 110010000–111111111

256-279 7 0000000–0010111

280-287 8 11000000–11000111

Universitas Sumatera Utara

Page 21: Ambigu Chapter II

Kode yang terdapat pada tabel 2.11 bukan merupakan yang sebenarnya ditulis

ke output. Apa yang sebenarnya ditulis ke output adalah kode prefix untuk EDOC,

yang diuraikan pada tabel 2.12. Untuk itu Istilah EDOC digunakan untuk

menghilangkan pengertian ambigu bagi tabel pertama. Tabel pertama menempatkan

EDOC 0-255 untuk literal, EDOC 256 untuk “end-of-block” dan EDOC 257-285

untuk length. 29 EDOC untuk length tidaklah cukup untuk merepresentasikan 256

kemungkinan yang menyatakan rangkaian simbol yang sesuai dari 3 hingga 258 bytes,

oleh sebab itu bit ektra digunakan. Nilai length tertinggi adalah 258, dengan kata lain

nilai length dibatasi 258 bytes yang artinya look-ahead buffer berukuran 258 bytes.

Sebagai contoh, jika didapati rangkaian simbol yang sesuai mempunyai length

10. Dengan menggunakan tabel 2.11, didapat EDOC 264. Kemudian, dengan tabel

2.12 EDOC 264 ditulis dengan 7 bit kode prefix, yaitu 0001000. Length 20 menjadi

EDOC 269 diikuti 2 bit ekstra 01, ditulis dengan 7 bit kode prefix, yaitu 0001101|01.

Length 258 menjadi EDOC 285, ditulis dengan 8 bit kode prefix, yaitu 11000101.

Sebuah end-of-block ditulis dengan 7 bit nilai 0, yaitu 0000000.

Tabel 2.13 Kode distance (Deutsch, L. P. 1996a)

Ko de

Bit ekstra

distance Ko De

Bit ekstra

distance Ko de

Bit ekstra

distance

0 0 1 10 4 33-48 20 9 1025-1536 1 0 2 11 4 49-64 21 9 1537-2048 2 0 3 12 5 65-96 22 10 2049-3072 3 0 4 13 5 97-128 23 10 3073-4096 4 1 5, 6 14 6 129-192 24 11 4097-6144 5 1 7, 8 15 6 193-256 25 11 6145-8192 6 2 9-12 16 7 257-384 26 12 8193-12288 7 2 13-16 17 7 385-512 27 12 12289-16384 8 3 17-24 18 8 513-768 28 13 16385-24576 9 3 25-32 19 8 769-1024 29 13 24577-32768

Tabel kedua, yaitu tabel distance dapat dilihat pada tabel 2.13. Sebuah jarak

direpresentasikan dengan kode prefix 5 bit yang diikuti dengan bit ekstra. Pertama

sekali, dengan menelusuri nilai jarak pada kolom distance, didapatlah “kode” pada

kolom kode yang merupakan prefix 5 bit tersebut. Pada kolom bit ekstra didapati

panjang bit ekstra. Untuk mendapatkan bit ekstra, dilakukan pengurangan antara jarak

dengan nilai awal pada kolom distance lalu dikonversi ke dalam bentuk bilangan biner

Universitas Sumatera Utara

Page 22: Ambigu Chapter II

dengan penambahan nol secukupnya sesuai panjang bit ekstra yang didapat. Nilai

distance tertinggi adalah 32.768, dengan kata lain nilai jarak dibatasi 32.768 bytes

yang artinya search buffer berukuran 32.768 bytes.

Sebagai contoh, jika didapati rangkaian simbol yang sesuai dengan distance 6,

ditulis 00100|1. Distance 21 ditulis 01000|100. Distance 401 ditulis 10001|0010000.

Distance 8195 ditulis 11010|000000000010. Distance 19505 ditulis 11100|

0110000110000.

Blok yang ditulis dengan cara ini akan didahului 1 byte yang menyatakan blok

menggunakan “kompresi dengan kode Huffman yang sudah ditentukan”, diikuti

bagian data yang sudah dikompres. Bagian ini ditulis dengan bentuk kode prefix untuk

literal dan length, dan kode prefix lain untuk distance. Blok diakhiri dengan kode

prefix “end-of-block”.

2.5.3 Kompresi Dengan Kode Huffman Yang Dinamis (BTYPE 10)

Pembangunan tabel kode sesuai dengan keadaan data yang akan dikompres dilakukan

pada blok ini. Hal ini menghasilkan tabel kode yang unik. Pembacaan keseluruhan

source input akan dilakukan untuk membentuk tabel probabilitas guna menghasilkan

kode Huffman. Dua buah tabel seperti cara BTYPE 01 juga dibentuk, keduanya ditulis

menjadi kesatuan dalam bagian data yang sudah dikompres dengan cara yang unik.

Bagian terpenting dalam algoritma Deflate ini terletak pada bagaimana mengkompresi

tabel kode dan bagimana mengembalikannya seperti semula.

Langkah-langkah utama untuk melakukan hal itu adalah sebagai berikut:

1. Masing-masing tabel dimulai sebagai pohon Huffman.

2. Pohon tersebut disusun kembali untuk memenuhi bentuk standar yang dapat

direpresentasikan menjadi rangkaian dari panjang kode.

3. Rangkaian kemudian dikompres dengan Run Length Encoding menjadi rangkaian

yang lebih sederhana.

Universitas Sumatera Utara

Page 23: Ambigu Chapter II

4. Dengan algoritma Huffman, diperoleh kode Huffman untuk rangkaian

sebelumnya. Pohon Huffman kembali disusun kembali untuk memenuhi bentuk

standar.

5. Pohon Huffman kemudian direpresentasikan menjadi rangkaian dari panjang kode

yang sebelumnya dipermutasi dan bisa saja dihilangkan sebagian pada output.

Dalam menggunakan algoritma Huffman, terdapat beberapa aturan tambahan

yang diberikan oleh algoritma Deflate. Pohon Huffman diharuskan memiliki bentuk

standar. Untuk itu, pohon yang baru harus memenuhi aturan berikut:

1. Kode yang lebih pendek muncul di sebelah kiri dan yang lebih panjang muncul di

sebelah kanan di pohon Huffman.

2. Ketika beberapa simbol memiliki kode dengan panjang yang sama, secara

lexicographically simbol yang lebih kecil ditempatkan di sebelah kiri.

Sebagai contoh, enam simbol (A, B, C, D, E, F) memiliki probabilitas

kemunculan masing-masing 0.11, 0.14, 0.12, 0.13, 0.24, dan 0.26. Dengan algoritma

Huffman, pohon Huffman yang dikonstruksi tampak pada gambar 2.12. Pohon

tersebut kembali disusun ulang dengan memperhatikan aturan (1) dan (2),

menghasilkan pohon Huffman yang tampak pada gambar 2.13. Pohon ini memiliki

kelebihan dimana dapat direpresentasikan secara baik oleh rangkaian 3, 3, 3, 3, 2, 2

yang adalah panjang kode dari keenam simbol tadi.

Gambar 2.12 Bentuk Standar Pohon Huffman Aturan (1)

A 000

C 001

E 01

D 100

B 101

F 11

0 0

0 0 1

1 1

1

Universitas Sumatera Utara

Page 24: Ambigu Chapter II

Gambar 2.13 Bentuk Standar Pohon Huffman Aturan (1) Dan (2)

Jika keenam simbol tersebut memiliki probabilitas kemunculan yang berbeda,

antara lain 0.26, 0.11, 0.14, 0.12, 0.24, dan 0.13. Maka, Rangkaian yang tebentuk

adalah 2, 3, 3, 3, 2, 3. Panjang dari kode dibatasi hingga 4 bit masing-masing. Dimana

dalam integer batas itu mempunyai interval [1, 15], berimplikasi bahwa kode tersebut

memiliki panjang paling banyak 15 bit.

Decoder mampu menghasilkan pohon Huffman kembali dengan membaca

rangkaian panjang kode dari tiap-tiap simbol. Penggalan berikut merupakan bagian

dari algoritma Deflate dalam menghasilkan kode yang kemudian ditempatkan pada

tree[I].code:

1. Hitung jumlah kode untuk masing-masing panjang kode. Menggunakan

bl_count[N] sebagai nilai yang menyatakan jumlah kode dengan panjang kode N

(N >= 1).

2. Hitung nilai dasar untuk masing-masing panjang kode yang ditempatkan pada

next_code[N] untuk panjang kode N.

code = 0; bl_count[0] = 0; for (bits = 1; bits <= MAX BITS; bits++) f

code = (code + bl_count[bits-1]) << 1; next_code[bits] = code; g

3. Menghasilkan kode yang sebenarnya.

for (n = 0; n <= max_code; n++) f

len = tree[n].Len; if (len != 0) f

tree[n].Code = next code[len]; next code[len]++;

C 110

D 111

A 100

B 101

0 0 1

1 E 00

F 01

1 1

0 0

Universitas Sumatera Utara

Page 25: Ambigu Chapter II

Sebagai contoh, diberikan masukan rangkaian 3, 3, 3, 3, 3, 2, 4, 4. Langkah

pertama tidak menemukan kode untuk panjang kode 1, 1 buah kode untuk panjang

kode 2 (bl_count[2] = 1), 5 buah kode untuk panjang kode 3 (bl_count[3] = 5) dan 2

buah kode untuk panjang kode 4 (bl_count[4] = 2). Langkah kedua memberi nilai 0

sebagai nilai dasar pada panjang kode 1. Dalam loop berikutnya tidak menemukan

kode, maka diberi nilai 0 sebagai nilai dasar pada panjang kode 2. Loop berikutnya

menemukan 1 buah kode, maka panjang kode 3 diberi nilai dasar 2 (2*(1+0)). Loop

terakhir ditemukan 5 buah kode, maka panjang kode 4 diberi nilai dasar 14 (2*(2+5)).

Langkah ketiga menghasilkan 3 bit kode 010 (nilai dasar 2), 011 (nilai dasar 2 + 1),

100 (nilai dasar 2 + 2), 101 (nilai dasar 2 + 3), 110 (nilai dasar 2 + 4) . Berikutnya

menghasilkan 4 bit kode 1110 (nilai dasar 14), 1111 (nilai dasar 14 + 1) dan terakhir 2

bit kode 00 (nilai dasar 0).

Rangkaian yang dijelaskan diatas dikenal dengan istilah SQ (Short Sequence)

dari panjang kode CL (Code Length). Algoritma Deflate lebih lanjut melakukan

kompresi terhadap SQl dengan menggunakan Run Length Encoding. Langkah-langkah

berikut dilakukan dalam mencapai maksud tersebut:

1. Menerapkan Run Length Encoding, menghasilkan rangkaian baru dengan istilah

SSQ (Short of Short Sequence).

2. Membangun pohon Huffman dari SSQ dan menghasilkan rangkaian baru dengan

istilah CCL (Code of Code Length) untuk kode-kode Hufman tersebut.

3. Permutasi ataupun juga penyederhanaan dari CCL dalam bagian data yang sudah

dikompres pada blok.

Langkah pertama. Ketika sebuah CL muncul lebih dari tiga kali, encoder

menambahkan CL kepada SSQ diikuti dengan flag khusus 16 dan 2 bit faktor

pengulangan (3-6 pengulangan). Sebagai contoh, sebuah rangkaian memuat CL 7

berulang-ulang sebanyak enam kali, akan dikompres menjadi 7, 16, 102. Faktor

pengulangan 102 menyatakan 5 kemunculan berturut-turut dari panjang kode yang

sama. Jika sebuah rangkaian memuat CL 6 berulang-ulang sebanyak sepuluh kali,

akan dikompres menjadi 6, 16, 112, 16, 002. Faktor pengulangan 112 menyatakan 6

Universitas Sumatera Utara

Page 26: Ambigu Chapter II

kemunculan berturut-turut dan 002 menyatakan 3 kemunculan berturut-turut dari

panjang kode yang sama.

CL 0 akan didapati dalam jumlah yang banyak. Hal ini dikarenakan dalam satu

blok akan banyak literal/length ataupun distance yang tidak muncul ataupun

ditemukan sehingga diberi nilai CL 0. Penggunaan flag khusus 17 dan 18 dikenakan

kepada CL 0. Flag 17 akan diikuti dengan 3 bit faktor pengulangan (3-10 pengulangan

CL 0). Flag 18 akan diikuti dengan 7 bit faktor pengulangan (11-138 pengulangan CL

0). Sebagai contoh, sebuah rangkaian memuat CL 0 berulang-ulang sebanyak enam

kali dikompres menjadi 17, 112 dan dua belas CL 0 dikompres menjadi 18, 012.

Terdapat SQ dengan 28 CL: 4, 4, 4, 4, 4, 3, 3, 3, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 0, 0,

0, 0, 0, 0, 2, 2, 2, 2. Rangkain tersebut akan dikompres menjadi SSQ dengan 16 angka:

4, 16, 012, 3, 3, 3, 6, 16, 112, 16, 002, 17, 112, 2, 16, 002. Atau dalam desimal menjadi:

4, 16, 1, 3, 3, 3, 6, 16, 3, 16, 0, 17, 3, 2, 16, 0.

Langkah kedua. Menghasilkan kode Huffman untuk SSQ berikut (dengan

probabilitas kemunculan berada pada tanda kurung): 0(2), 1(1), 2(1), 3(5), 4(1), 6(1),

16(4), 17(1). Pohon Huffman dalam bentuk standar dapat dilihat pada gambar 2.14

dan 2.15. Sehingga didapatlah kode Huffman dengan CCL sebagai berikut: 4, 5, 5, 1,

5, 5, 2 dan 4 berturut-turut untuk kode 0, 1, 2, 3, 4, 6, 16, dan 17.

Gambar 2.14 Pohon Huffman SSQ

3 1

16 01 17

0011

4 00100

6 00101

1 00010

2 00011

0 0000

Universitas Sumatera Utara

Page 27: Ambigu Chapter II

Gambar 2.15 Bentuk Standar Pohon Huffman SSQ

Langkah ketiga. Rangkaian dari CCL kemudian diperluas menjadi 19 angka

dengan menambahkan angka ‘0’ kepada posisi CCL yang tidak dipakai. Kemudian

akan dilakukan pengacakan dengan urutan tertentu dan dilakukan permutasi.

Position : 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

CLL : 4 5 5 1 5 0 5 0 0 0 0 0 0 0 0 0 2 4 0

Position : 16 17 18 0 8 7 9 6 10 5 11 4 12 3 13 2 14 1 15

CLL : 2 4 0 4 0 0 0 5 0 0 0 5 0 1 0 5 0 5 0

Permutasi dilakukan dengan maksud menghilangkan rangkaian ‘0’ yang

berada diakhir rangkaian dari CCL, sehingga dengan memperhatikan contoh diatas

rangkaian akhir berupa 18 kode. Rangkaian akhir kemudian akan ditulis pada

compressed stream.

Blok yang ditulis dengan cara ini akan didahului 1 byte yang menyatakan

“blok menggunakan kompresi dengan kode Huffman yang dinamis”, diikuti tabel

kode Huffman, dua buah tabel (literal/length dan distance) dan bagian data yang

sudah dikompres. Bagian ini ditulis dengan bentuk kode prefix untuk literal dan

length, dan kode prefix lain untuk distance. Blok diakhiri dengan sebuah kode “end-

of-block”.

0 1100

3 0

16 10

1 11100

2 11101

17 1101 4

11110

6 11111

Universitas Sumatera Utara