Qu'est-ce que Codage de Huffman ?
Méthode qui construit, à partir des probabilités des symboles, un code préfixe dont la longueur moyenne de code est la plus petite possible. On construit un arbre en fusionnant de façon répétée les deux symboles (ou nœuds) de plus faibles probabilités en un seul, et l'on attribue 0 et 1 à chaque embranchement pour former les mots de code. Plus un symbole est fréquent, plus son mot de code est court. Il est optimal parmi les codes préfixes qui codent un symbole à la fois, et sa longueur moyenne de code est au moins égale à l'entropie et inférieure à l'entropie + 1 bit. Il est utilisé en combinaison avec d'autres méthodes dans Deflate (ZIP, gzip), JPEG et ailleurs. Huffman l'a publié en 1952.
Nom japonais: ハフマン符号
« Codage de Huffman » apparaît dans 5 questions d'entraînement réparties sur 1 thèmes, dont Bases de la théorie de l'information et du codage.
Domaine: Bases de la théorie de l'information et du codage
Comment le construire
Pour des symboles de probabilités 1/2, 1/4, 1/8 et 1/8, on fusionne d'abord les deux 1/8 en 1/4, puis ce nœud et le 1/4 en 1/2, et enfin ce nœud et le 1/2 restant. En étiquetant par 0 et 1 les branches qui vont de la racine à chaque symbole, on obtient les mots de code 0, 10, 110 et 111, avec une longueur moyenne de code de 1,75 bit, égale à l'entropie. Lorsque chaque probabilité est l'inverse d'une puissance de 2, la longueur moyenne de code coïncide ainsi avec l'entropie.
Les mots de code ne sont pas uniques
Les mots de code changent selon la façon d'attribuer 0 et 1 et selon celle de deux probabilités égales que l'on fusionne en premier. Par exemple, avec les probabilités 0,4 ; 0,2 ; 0,2 ; 0,1 et 0,1, les longueurs de code peuvent être 1, 2, 3, 4, 4 ou 1, 3, 3, 3, 3 ou 2, 2, 2, 3, 3, mais la longueur moyenne de code vaut 2,2 bits dans tous les cas. C'est pourquoi les examens demandent plutôt la longueur moyenne de code que les mots de code eux-mêmes.
Questions fréquentes
Que faut-il pour restaurer des données compressées par un code de Huffman ?
Pour restaurer les données, il faut savoir quel mot de code a été attribué à quel symbole (une table de codage, ou la longueur de code de chaque symbole). Les données compressées transportent donc leur table de codage ou utilisent une table convenue à l'avance. Deflate n'envoie que les longueurs de code, et le récepteur reconstruit les mots de code selon la même règle (codes de Huffman canoniques).
Un code de Huffman peut-il réduire n'importe quelles données ?
Non. Si les probabilités des symboles ne sont pas dissymétriques, les données ne se réduisent presque pas. Par exemple, dans des données où les 256 valeurs d'octet sont équiprobables, chaque mot de code fait 8 bits, et la table de codage rend le résultat légèrement plus gros.