Le codage de Huffman est une méthode de compression statistique de données qui permet de réduire la longueur du codage d'un alphabet. Le code de Huffman (1952) est un code de longueur variable optimal, c'est-à-dire tel que la longueur moyenne d'un texte codé soit minimale. On observe ainsi des réductions de taille de l'ordre de 20 à 90%.
| L'algorithme opère sur une forêt.
Une forêt est ici un ensemble d'arbres étiquetés complets: tout noeud
interne (c'est-à-dire qui n'est pas une feuille) a deux fils
non-vides. La forêt initiale est formée d'un arbre à un noeud pour chaque lettre du langage-source, dont l'étiquette est la probabilité de cette lettre. La forêt finale est formée d'un unique arbre, qui est l'arbre de décodage du code. L'algorithme est de type glouton: il choisit à chaque étape les deux arbres d'étiquettes minimales, soit x et y, et les remplace par l'arbre formé de x et y et ayant comme étiquette la somme de l'étiquette de x et de l'étiquette de y. La figure ci-contre représente les étapes de la construction d'un code de Huffman pour l'alphabet source {A, B, C, D, E, F}, avec les probabilités P(A)=0.10, P(B)=0.10, P(C)=0.25, P(D)=0.15, P(E)=0.35 et P(F)=0.05. Le code d'une lettre est alors déterminé en suivant le chemin depuis la racine de l'arbre jusqu'à la feuille associée à cette lettre en concaténant successivement un 0 ou un 1 selon que la branche suivie est à gauche ou à droite. Ainsi, sur la figure ci-contre, A=0111, B=010, C=10, D=00, E=11 et F=0110. |
Par exemple le mot FADE serait codé 011001110011. Pour décoder, on lit simplement la chaîne de bits de gauche à droite. Le seul "découpage" possible, grâce à la propriété du préfixe, est 0110-0111-00-11.
Construisez un codage de Huffman du message "ceciestuncodagedehuffman" (on a supprimé les espaces et la ponctuation pour simplifier la construction). Il y a plusieurs codages de Huffman possibles.
Vérifiez la propriété du préfixe.
Utilisez le tableau ci-dessous pour déterminer le codage de Huffman de la langue française.
| Lettre | Fréquence | Lettre | Fréquence |
| A | 8.40 % | N | 7.13 % |
| B | 1.06 % | O | 5.26 % |
| C | 3.03 % | P | 3.01 % |
| D | 4.18 % | Q | 0.99 % |
| E | 17.26 % | R | 6.55 % |
| F | 1.12 % | S | 8.08 % |
| G | 1.27 % | T | 7.07 % |
| H | 0.92 % | U | 5.74 % |
| I | 7.34 % | V | 1.32 % |
| J | 0.31 % | W | 0.04 % |
| K | 0.05 % | X | 0.45 % |
| L | 6.01 % | Y | 0.30 % |
| M | 2.96 % | Z | 0.12 % |
| Les corrigés sont disponibles, mais seulement pour les visiteurs autorisés! |