Adloun

Huffman : construire, coder, chiffrer le gain

Exercice · niveau 2 · informatique (MP2I/MPI), chapitre 18 — Algorithmique des textes

Énoncé

Coder abracadabra par Huffman. Donner l'arbre, les mots de code, la longueur du codage, et la comparer à un codage ascii et à un codage de longueur fixe. L'arbre est-il unique ?

Corrigé

Les fréquences : , , , , , pour caractères.

La construction, en extrayant à chaque tour les deux plus petits poids (à poids égal, on prend d'abord la feuille alphabétiquement la plus petite, puis les nœuds par ordre de création) :


file : c(1) d(1) b(2) r(2) a(5)
  fusion c(1) + d(1) -> [cd](2)     file : b(2) r(2) [cd](2) a(5)
  fusion b(2) + r(2) -> [br](4)     file : [cd](2) [br](4) a(5)
  fusion [cd](2) + [br](4) -> (6)   file : a(5) [bcdr](6)
  fusion a(5) + [bcdr](6) -> (11)   file : [abcdr](11)

Les mots de code : , , , , .

Le codage de abracadabra :


0 110 111 0 100 0 101 0 110 111 0   =  01101110100010101101110   (23 bits)

Le coût, par la formule : bits. Le compte des bits écrits le confirme.

Les comparaisons.

Codagebitsrapport
ascii, bits par caractère
longueur fixe, bits
Huffman
entropie (borne inférieure)

Huffman est à de la borne théorique — il ne peut pas faire beaucoup mieux, et aucun code caractère par caractère ne le peut.

Non, l'arbre n'est pas unique. Une autre règle de départage (nouveaux nœuds insérés avant les feuilles de même poids) donne , , , , — un profil de longueurs différent : au lieu de . Et pourtant :

Même coût, à l'unité près. C'est un résultat général : Huffman produit un code optimal, et l'optimum est unique en valeur, jamais en forme. On ne teste donc pas une mise en œuvre de Huffman en comparant l'arbre à un arbre attendu — on la teste en comparant le coût total, et en vérifiant que le code est préfixe.

Les autres exercices de ce chapitre Le cours du chapitre

Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.