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
Original Text:
Unheimliche Augen gesehen nahe See
Codiert : 000010110000011001110001010110110100111110111111000111111110100100101
Warum ist in der Huffman-Codierung kein Trennzeichen erforderlich?
coding-theory
encoding-scheme
huffman-coding
BufBills
quelle
quelle
Eerie eyes seen near lake
(nun, mit Ausnahme des Leerzeichens). Die Zeichen selbst benötigen jedoch keine Trennzeichen. Warum ist das nicht so?cat cheat for mice
≠catch eat form ice
. Ihre Analogie ist fehlerhaft: Jeder Buchstabe ist atomar; Buchstaben sind einfach zu unterscheiden und in sich trennbar. Eine bessere Analogie wäre "Warum kann man eine kursive (handgeschriebene) Schrift lesen, wenn jedes Wort nur eine lange, sich windende, sich selbst schneidende Linie hat?", Und selbst das ist eine schlechte Analogie, da man sich ein handgeschriebenes Wort ansehen kann ( oder sogar einen Teil von einem) und unterscheiden die einzelnen Buchstaben - während eine Huffman-codierte Zeichenfolge Kauderwelsch ist, wenn Sie den Anfang nicht sehen können.Antworten:
Sie benötigen kein Trennzeichen, da Huffman-Codes vorwahlfreie Codes sind (auch "Vorwahlcodes" genannt). Dies bedeutet, dass kein Codewort ein Präfix eines anderen Codeworts ist. Beispielsweise ist das Codewort für "e" in Ihrem Beispiel 10, und Sie können sehen, dass keine anderen Codewörter mit den Ziffern 10 beginnen.
Dies bedeutet, dass Sie gierig decodieren können, indem Sie die codierte Zeichenfolge von links nach rechts lesen und ein Zeichen ausgeben, sobald Sie ein Codewort gesehen haben. Beispielsweise codieren 0, 00 und 000 nichts, sodass Sie weiterhin Bits lesen. Wenn Sie 0000 lesen, das "E" codiert, und weil der Code kein Präfix enthält, wissen Sie, dass es kein anderes Codewort 0000x gibt, sodass Sie jetzt "E" ausgeben und mit dem Lesen des nächsten Codeworts beginnen können. Wieder codiert 1 nichts außer 10 codiert "e". Kein anderes Codewort beginnt mit "10", daher können Sie "e" ausgeben. Und so weiter.
quelle
Es ist hilfreich, es sich als Baum vorzustellen. Sie durchlaufen einfach den Baum, bis Sie einen Blattknoten treffen, und starten dann von der Wurzel aus neu. An dem Algorithmus, der Huffman-Codierung ausführt, können Sie erkennen, dass diese Art von Struktur im Prozess erstellt wird.
https://en.wikipedia.org/wiki/File:HuffmanCodeAlg.png
quelle
Kein anderer Code als E beginnt mit 0000. Kein anderer Code als i beginnt mit 0001. Und so weiter. Im Extremfall beginnt kein anderer Code als e mit 01. Sie haben keine Dinge wie E = 0000, Leerzeichen = 000, bei denen Sie nicht wissen, was zu tun ist, wenn Sie drei Nullen finden.
Sehen Sie sich Ihre codierte Zeichenfolge an: 0000101100000 ...
Sie lesen die erste Null. Sie wissen, dass der Code aus E, i, y, l, k, Komma oder Leerzeichen besteht. Die nächste Null bedeutet, dass es nicht k, Komma oder Leerzeichen ist, sondern E, i, y oder l. Die nächste Null bedeutet, dass es E oder i ist. Die nächste Null bedeutet, dass es ein E ist. Wenn Sie wissen, um welchen Code es sich handelt, wissen Sie, dass Sie alle Bits für diesen Code analysiert haben.
Dann haben Sie 101100000 ... Die 1 bedeutet, Sie haben e, r, s, n oder a. Das nächste Bit ist 0, der Code ist also e. Wieder bist du mit diesem Charakter fertig.
quelle
Wir können bei der Huffman-Codierung kein Trennzeichen verwenden, da das binäre Äquivalent jedes Buchstabens nicht mit dem vorangestellten Code eines Buchstabens übereinstimmt. Daher können wir auch ohne Trennzeichen auskommen.
quelle