Algoritma LZW
Algoritma LZW melakukan kompresi dengan mengunakan kode table 256 hingga 4095 untuk mengkodekan pasangan byte atau string. Dengan metode ini banyak string yang dapat dikodekan dengan mengacu pada string yang telah muncul sebelumnya dalam teks.
Algoritma kompresi LZW secara lengkap :
1. Dictionary (kamus) diinisialisasi dengan semua karakter dasar yang ada : {‘A’..’Z’,’a’..’z’,’0’..’9’}.
2. W <- karakter pertama dalam stream karakter.
3. K <- karakter berikutnya dalam stream karakter.
4. Lakukan pengecekan apakah (W+K) terdapat dalam Dictionary
a. Jika ya, maka W <- W + K (gabungkan W dan K menjadi string baru).
b. Jika tidak, maka :
- Output sebuah kode untuk menggantikan string W.
- Tambahkan string (W+ K) ke dalam dictionary dan berikan nomor/kode berikutnya yang belum digunakan dalam dictionary untuk string tersebut.
- W <- K.
5. Lakukan pengecekan apakah masih ada karakter berikutnya dalam stream karakter.
a. Jika ya, maka kembali ke langkah 2.
b. Jika tidak, maka output kode yang menggantikan string W, lalu terminasi proses (stop).
Sebagai contoh, string “ABBABABAC” akan dikompresi dengan LZW. Isi pada dictionary diset dengan tiga karakter dasar yang ada yaitu: “A”, “B”, dan “C”.
Kolom posisi menyatakan posisi sekarang dari stream karakter dan kolom karakter menyatakan karakter yang terdapat pada posisi tersebut. Kolom dictionary menyatakan string baru yang sudah ditambahkan ke dalam dictionary dan nomor indeks untuk string tersebut ditulis dalam kurung siku. Kolom output menyatakan kode output yang dihasilkan oleh langkah kompresi.
Proses dekompresi data pada algoritma LZW tidak jauh berbeda dengan proses kompresinya. Pada dekompresi LZW, juga dibuat tabel dictionary dari data input kompresi, sehingga tidak diperlukan penyertaan tabel dictionary ke dalam data kompresi.
Berikut algoritma dekompresi LZW :
1. Dictionary diinisialisasi dengan semua karakter dasar yang ada : {‘A’..’Z’,’a’..’z’,’0’..’9’}.
2. CW kode pertama dari stream salah satu karakter dasar).
3. Lihat dictionary dan output string dari kode tersebut (string.CW) ke stream karakter.
4. PW <- CW; CW <- kode berikutnya dari stream kode.
5. Apakah string.CW terdapat dalam dictionary ?
a. Jika ada, maka :
- Output string.CW ke stream karakter
- P <- string.PW
- C <- karakter pertama dari string.CW
-Tambahkan string (P+C) ke dalam dictionary
b. Jika tidak, maka :
- P <- string.PW
- C <- karakter pertama dari string.PW
-Output string (P+C) ke stream tambahkan string tersebut ke dalam (sekarang berkorespondensi dengan CW)
6. Apakah terdapat kode lagi di stream code?
a. Jika ya, maka kembali ke langkah 4.
b. Jika tidak, maka terminasi proses (stop).
terkait dengan algoritma kompresi, bisa diunduh artikel berikut http://repository.gunadarma.ac.id/bitstream/123456789/1352/1/21107685.pdf
BalasHapus