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
Texte original:
Yeux étranges vus près du lac
Encodé : 0000101100000110011100010101101101001111101011111100011001111110100100101
Pourquoi n'y a-t-il pas besoin d'un séparateur dans l'encodage Huffman?
Eerie eyes seen near lake
(enfin, sauf pour le caractère espace). Mais les personnages eux-mêmes n'ont pas besoin de séparateurs. Pourquoi n'est-ce pas?cat cheat for mice
≠catch eat form ice
. Votre analogie est défectueuse: chaque lettre est atomique; les lettres sont trivialement distinguées et intrinsèquement séparables. Une meilleure analogie serait "Pourquoi pouvez-vous lire un script cursif (manuscrit), alors que chaque mot n'est qu'une seule ligne longue, se tortillant et se croisant?", Et même cela est une mauvaise analogie, car vous pouvez regarder un mot manuscrit ( ou même une partie de celle-ci) et discerner les lettres individuelles - alors qu'une chaîne codée par Huffman est du charabia si vous ne pouvez pas voir le début.Réponses:
Vous n'avez pas besoin d'un séparateur parce que les codes Huffman sont des codes sans préfixe (également appelés «codes de préfixe»). Cela signifie qu'aucun mot de code n'est un préfixe d'un autre mot de code. Par exemple, le mot de code pour «e» dans votre exemple est 10, et vous pouvez voir qu'aucun autre mot de code ne commence par les chiffres 10.
Cela signifie que vous pouvez décoder goulûment en lisant la chaîne codée de gauche à droite et en sortant un caractère dès que vous avez vu un mot de code. Par exemple, 0, 00 et 000 ne codent rien, vous continuez donc à lire des bits. Lorsque vous lisez 0000, cela code "E" et, comme le code est sans préfixe, vous savez qu'il n'y a pas d'autre mot de code 0000x, vous pouvez donc maintenant sortir "E" et commencer à lire le mot de code suivant. Encore une fois, 1 ne code rien, mais 10 code "e". Aucun autre mot de code ne commence par «10», vous pouvez donc sortir «e». Etc.
la source
Il est utile de l'imaginer comme un arbre. Vous traversez simplement l'arbre jusqu'à ce que vous atteigniez un nœud feuille, puis redémarrez à partir de la racine. De l'algorithme qui fait le codage de Huffman, vous pouvez voir que ce type de structure est créé dans le processus.
https://en.wikipedia.org/wiki/File:HuffmanCodeAlg.png
la source
Aucun code autre que E ne commence par 0000. Aucun code autre que i ne commence par 0001. Et ainsi de suite. Dans un cas extrême, aucun code autre que e ne commence par 01. Vous n'avez pas de choses comme E = 0000, espace = 000, où vous ne sauriez pas quoi faire si vous trouvez trois zéros.
Regardez votre chaîne encodée: 0000101100000 ...
Vous lisez le premier zéro. Vous savez que le code est l'un des E, i, y, l, k, virgule ou espace. Le zéro suivant signifie que ce n'est pas k, virgule ou espace, mais E, i, y ou l. Le zéro suivant signifie que c'est E ou i. Le zéro suivant signifie que c'est un E. Lorsque vous savez de quel code il s'agit, vous savez que vous avez analysé tous les bits de ce code.
Ensuite, vous avez 101100000 ... Le 1 signifie que vous avez e, r, s, n ou a. Le bit suivant est 0, donc le code est e. Encore une fois, vous avez terminé avec ce personnage.
la source
Nous ne pouvons pas utiliser le séparateur dans le codage Huffman parce que l'équivalent binaire de chaque lettre ne correspond pas au code préfixé de n'importe quelle lettre, nous pouvons donc nous passer même d'utiliser le séparateur.
la source