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

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

Embed Size (px)

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

  • 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

  • 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

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

    Karena input yang dikodekan berjumlah satu buah, buffer kembali

    digeser sebanyak satu karakter ke kiri.

  • 8

    Keadaan ketiga dan keadaan keempat masih sama seperti pada

    keadaan pertama dan kedua. Dengan demikian, akan dikeluarkan

    token dan token 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 . 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 . 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.

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

  • 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:

  • 11

    Token yang terdiri dari pasangan byte .

    Token yang terdiri dari triplet .

    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 ditemuka