1
aritmatika coding. Arithmetic coding mencapai tingkat kompresi
dekat dengan terbaik untuk model statistik tertentu, yang diberikan
oleh entropi informasi, sedangkan kompresi Huffman lebih
sederhana dan lebih cepat tetapi menghasilkan hasil yang buruk
untuk model yang berhubungan dengan simbol probabilitas
mendekati 1.1
4. KETERBATASAN
2
Lossless data algoritma kompresi tidak dapat menjamin kompresi
untuk semua set input data. Dengan kata lain, untuk setiap
algoritma kompresi (lossless) data, akan ada masukan data set
yang tidak mendapatkan yang lebih kecil ketika diproses oleh
algoritma. Hal ini mudah dibuktikan dengan matematika dasar
menggunakan argumen menghitung , sebagai berikut:
Bahkan, jika kita menganggap file panjang N, jika semua file yang
sama mungkin, maka untuk setiap kompresi lossless yang
mengurangi ukuran beberapa file, panjang yang diharapkan dari
sebuah file terkompresi (rata-rata lebih dari semua file yang
3
mungkin dengan panjang N) tentu harus lebih besar dari N. Jadi
jika kita tahu apa-apa tentang sifat-sifat data kita mengompresi, kita
mungkin juga tidak kompres sama sekali. Sebuah algoritma
kompresi lossless hanya berguna bila kita lebih cenderung untuk
kompres jenis file tertentu daripada yang lain, kemudian algoritma
bisa dirancang untuk kompres jenis-jenis data yang lebih baik. 1
Secara khusus, file acak data tidak dapat konsisten dikompresi oleh
algoritma kompresi data lossless dibayangkan: memang, hasil ini
digunakan untuk mendefinisikan konsep keacakan dalam teori
kompleksitas algoritmik.1
3
comp.compression FAQ daftar entri # 9: Kompresi data acak (WEB, Gilbert dan lain-lain)
4
berulang kali untuk mengurangi losslessly file apapun ke panjang 0.
Diduga "sempurna" algoritma kompresi biasanya disebut mengejek
"ajaib" algoritma kompresi.
Di sisi lain, juga telah terbukti bahwa tidak ada algoritma untuk
menentukan apakah suatu file inkompresibel dalam arti
kompleksitas Kolmogorov; sehingga, diberikan file tertentu, bahkan
jika muncul secara acak, mungkin bahwa mungkin secara signifikan
dikompresi , bahkan termasuk ukuran decompressor tersebut.
Contohnya adalah angka dari konstanta matematika pi , yang
muncul acak tetapi dapat dihasilkan oleh sebuah program yang
sangat kecil. Namun, meskipun tidak dapat ditentukan apakah
sebuah file tertentu inkompresibel, sebuah teorema sederhana
tentang string mampat menunjukkan bahwa lebih dari 99% dari file
dari setiap panjang diberikan tidak dapat dikompresi oleh lebih dari
satu byte (termasuk ukuran decompressor tersebut).3
5
Lebih umum adalah metode dimana kamus dimulai di beberapa
negara yang telah ditentukan tetapi isinya berubah selama proses
encoding, berdasarkan data yang telah disandikan. Baik LZ77 dan
LZ78 kerja algoritma pada prinsip ini. Dalam LZ77, struktur data
yang disebut "jendela geser" digunakan untuk memegang bytes
terakhir N data diproses; jendela ini berfungsi sebagai kamus,
efektif menyimpan setiap substring yang telah muncul dalam byte
N terakhir sebagai entri kamus.2 Alih-alih sebuah indeks tunggal
mengidentifikasi entri kamus, dua nilai yang diperlukan: panjang,
menunjukkan panjang teks yang cocok, dan offset (juga disebut
jarak), menunjukkan yang cocok ditemukan di jendela geser mulai
offset byte sebelum teks saat ini.
Contoh:
Teks yang akan dikompresi dimulai "HURLYBURLY". Dalam enam
langkah pertama dari encoding, kita output indeks untuk H, U, R, L,
Y, dan B, dan kami tambahkan ke kamus entri baru untuk HU, UR,
RL, LY, YB, dan BU. Pada tahap ketujuh, kita berada di awal
"URLY"; entri terpanjang dalam kamus kami yang cocok dengan
teks ini "RU", sebuah entri kami menambahkan pada tahap kedua.
Kami mengirim indeks untuk "UR" untuk output, dan tambahkan
sebuah entri untuk "URL" ke dalam kamus. Pada langkah
kedelapan, kami mengirim indeks untuk "LY" untuk output, dan
dengan asumsi bahwa ruang berikut HURLYBURLY dalam teks,
kita tambahkan sebuah entri untuk "LY" ke dalam kamus. Jika
kemudian dalam teks kita adalah untuk menemukan kata
"HURLYBURLY" lagi, kita bisa menyalinnya kali ini (dengan asumsi
kita dimulai pada H) dalam waktu tidak lebih dari lima indeks: - HU,
RL, YB, URL, dan Y.1
4
Craig, Patrick. "The 5000 Compression $ Challenge"
6
Decoder LZ78 menerima masing-masing simbol dan, jika sudah
memiliki awalan sebelumnya, menambahkan awalan ditambah
simbol untuk perusahaan memiliki kamus terpisah. Kemudian
output simbol dan menetapkan prefiks ke karakter terakhir dari
simbol. Satu "gotcha" di sini adalah bahwa jika encoder melihat
urutan dari bentuk STRING STRING KARAKTER, di mana STRING
saat ini dalam kamus, itu akan menampilkan simbol yang satu lebih
tinggi dari decoder itu terakhir masuk kamus. Decoder harus
mendeteksi seperti suatu peristiwa dan output simbol sebelumnya
ditambah karakter pertama. Simbol ini akan selalu hanya satu lebih
tinggi dari simbol nomor terakhir di decoder kamus. 1
Encoding HURLYBURLY
H H
U HU
R UR
L RL
Y LY
B YB
U BU
R - (UR sudah ada di kamus)
L URL
Y RLY (tidak masalah)
Contoh:
Encoder ini BANANANANA encoding, setelah keluaran indeks untuk
B, A, N dan encoder AN telah di kamus entri untuk BA, AN, NA, dan
ANA dan decoder memiliki entri untuk BA, AN, dan NA. encoder ini
dapat cocok dengan "ANA" sehingga mengirimkan indeks untuk
"ANA" dan menambahkan "anan" ke dalam kamus. Namun, decoder
tidak memiliki "ANA" dalam kamus. Ini harus menebak bahwa ini
simbol baru adalah awalan (simbol terakhir yang diterimanya, "AN")
ditambah dengan karakter pertama ("A"). Kemudian keluaran "ANA"
dan menambahkan awalan ditambah karakter terakhir dari output
("A" lagi) ke dalam kamus. Decoding dapat terus dari sana.1
7
dilakukan berulang-ulang selama ada byte yang tidak muncul dalam
teks sumber, dan byte yang sudah mewakili kombinasi byte lain
dapat sendiri muncul dalam kombinasi. 1