Char Code
==== ====
E 0000
i 0001
y 0010
l 0011
k 0100
. 0101
space 011
e 10
r 1100
s 1101
n 1110
a 1111
Teks asli:
Mata menakutkan terlihat di dekat danau
Disandikan : 0000101100000110011100010101101101001111101011111100011001111110100100101
Mengapa tidak perlu pemisah dalam pengkodean Huffman?
coding-theory
encoding-scheme
huffman-coding
BufBills
sumber
sumber
Eerie eyes seen near lake
(well, kecuali untuk karakter spasi). Tetapi karakter itu sendiri tidak membutuhkan pemisah. Kenapa tidak?cat cheat for mice
≠catch eat form ice
. Analogi Anda cacat: setiap huruf adalah atom; surat-surat dibedakan secara sepele dan secara intrinsik dapat dipisahkan. Analogi yang lebih baik adalah "Mengapa Anda bisa membaca skrip kursif (tulisan tangan), ketika setiap kata hanya satu baris panjang, coretan, memotong garis sendiri?", Dan bahkan itu adalah analogi yang buruk, karena Anda dapat melihat kata tulisan tangan ( atau bahkan sebagian dari satu) dan membedakan masing-masing huruf - sedangkan string yang dikodekan Huffman adalah omong kosong jika Anda tidak dapat melihat awal.Jawaban:
Anda tidak memerlukan pemisah karena kode Huffman adalah kode bebas awalan (juga, tidak membantu, dikenal sebagai "kode awalan"). Ini berarti bahwa tidak ada codeword yang merupakan awalan dari codeword lainnya. Misalnya, kode kata untuk "e" dalam contoh Anda adalah 10, dan Anda dapat melihat bahwa tidak ada kata kode lain dimulai dengan angka 10.
Ini berarti bahwa Anda dapat mendekode dengan rakus dengan membaca string yang disandikan dari kiri ke kanan dan menghasilkan karakter segera setelah Anda melihat kata sandi. Misalnya, 0, 00 dan 000 tidak membuat kode apa pun sehingga Anda terus membaca bit. Ketika Anda membaca 0000, yang mengkodekan "E" dan, karena kode bebas awalan, Anda tahu tidak ada 0000x codeword lain, jadi Anda sekarang dapat menampilkan "E" dan mulai membaca codeword berikutnya. Sekali lagi, 1 tidak mengkodekan apa pun kecuali 10 mengkodekan "e". Tidak ada codeword lain yang dimulai dengan "10", sehingga Anda dapat menampilkan "e". Dan seterusnya.
sumber
Sangat membantu untuk membayangkannya sebagai pohon. Anda cukup melintasi pohon sampai Anda menekan simpul daun, dan kemudian memulai kembali dari root. Dari algoritma yang melakukan huffman coding, Anda dapat melihat bahwa struktur semacam ini dibuat dalam proses.
https://en.wikipedia.org/wiki/File:HuffmanCodeAlg.png
sumber
Tidak ada kode selain E dimulai dengan 0000. Tidak ada kode selain saya mulai dengan 0001. Dan seterusnya. Sebagai kasus ekstrem, tidak ada kode selain e dimulai dengan 01. Anda tidak memiliki hal-hal seperti E = 0000, spasi = 000, di mana Anda tidak akan tahu apa yang harus dilakukan jika Anda menemukan tiga nol.
Lihatlah string Anda yang disandikan: 0000101100000 ...
Anda membaca nol pertama. Anda tahu kode itu salah satu dari E, i, y, l, k, koma, atau spasi. Nol berikutnya berarti bukan k, koma, atau spasi, tetapi E, i, y atau l. Nol berikutnya berarti E atau i. Nol berikutnya berarti E. Ketika Anda tahu kode mana, Anda tahu Anda telah menguraikan semua bit untuk kode itu.
Maka Anda memiliki 101100000 ... 1 berarti Anda memiliki e, r, s, n atau a. Bit selanjutnya adalah 0, jadi kodenya adalah e. Sekali lagi, Anda selesai dengan karakter itu.
sumber
Kami tidak dapat menggunakan pemisah dalam pengkodean Huffman karena setiap biner setara huruf tidak cocok dengan kode awalan huruf apa pun, sehingga kami dapat melakukannya tanpa menggunakan pemisah.
sumber