Professional Documents
Culture Documents
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.
2.2.1 Konsep
Input Output
Dekompresi
Coded Data/File Original Data/File
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).
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.
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.
Algoritma
AABBBA 000001101101100
Kompresi
Algoritma
000001101101100 AABBBA
Dekompresi
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
3.1415926 Kompresi 0001100111001
Algoritma
0001100111001 Dekompresi 3.14
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).
Sliding Window
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).
Rangkaian simbol
… amadimenanggapiamanamanatpresiden
yang akan dibaca
Keterangan:
1. S[1..n] sebagai Source Input.
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.
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.
5. f adalah offset, posisi yang menunjuk karakter pertama dari sisi kanan Dictionary.
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.
I A 3 _ 2 2
5 4 0 1 3 0 1 0 1
D J U R N Y
2 1 1 1 1 1
Gambar 2.7 Pembentukan Pohon Huffman Tahap 1, 2 dan 3
7 5 I 4
0 1 0 1 5 0 1
A 3 _ 2 2 K
4 0 1 3 0 1 0 1 2
D J U R N Y
2 1 1 1 1 1
12 9
0 1 0 1
7 5 I 4
0 1 0 1 5 0 1
A 3 _ 2 2 K
4 0 1 3 0 1 0 1 2
D J U R N Y
2 1 1 1 1 1
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.
12 9
0 1 0 1
7 5 I 4
0 1 0 1 5 0 1
A 3 _ 2 2 K
4 0 1 3 0 1 0 1 2
D J U R N Y
2 1 1 1 1 1
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
Keterangan:
1. Source input berbentuk binary.
2. Source output berbentuk simbol original.
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.
Rangkaian simbol
… , sapudikadapumembelisapumerah yang akan dibaca
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.
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.
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
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.
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 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
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”.
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.
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.
0 1 0 1
0 1 0 1
E F
A C 01 D B 11
000 001 100 101
Gambar 2.13 Bentuk Standar Pohon Huffman Aturan (1) Dan (2)
len = tree[n].Len;
if (len != 0) f
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
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.
3
16 1
01
0 17
0000 1 2 4 6 0011
00010 00011 00100 00101
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
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”.