Quand il s'agit de transmettre de l'information sur un canal non bruité, l'objectif prioritaire est de minimiser la taille de la représentation de l'information : c'est le problème de la compression de données. 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, c'est-à-dire une
ensemble d'arbres. Ceux-ci sont des arbres étiquetés
complets : tout nud interne (c'est-à-dire qui
n'est pas une feuille) a deux fils non-vides (l'arbre de la
figure 20 n'est pas complet car les n
uds 4 et 7 n'ont
qu'un seul fils non-vide).
La forêt initiale est formée d'un arbre à un nud 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 et
, et les remplace par l'arbre formé de
et
et ayant
comme étiquette la somme de l'étiquette de
et de l'étiquette de
.
La figure 21 représente les étapes de la construction d'un
code de Huffman pour l'alphabet source
, avec les
probabilités
,
,
,
,
,
.
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.
Le codage se réalise facilement à l'aide d'une table associant à chaque
lettre son code ; une fois ce code construit, le décodage se réalise
avec un arbre de décodage (figure 7,
page ), grâce à la propriété de préfixe des codes de
Huffman (voir § 26).
lettre | code |
A | 0111 |
B | 010 |
C | 10 |
D | 00 |
E | 11 |
F | 0110 |
Compte tenu de ces probabilités, le code obtenu a une longueur moyenne
de , alors que l'entropie du langage source est
, qui est
légèrement inférieure. On montre que la longueur moyenne d'un code de
Huffman peut approcher l'entropie d'aussi près que voulu, à condition de
coder non pas des lettres, mais des blocs de lettres de longueur assez
grande.