Complication et décompression de huffman en oCaml
On travaillera depuis la machine virtuelle ClefAgreg2019. On commencera par créer un fichier
OCaml TP19.ml, initialement vide.
On rappelle qu’on compile ce fichier avec COMPILATEUR = ocamlc ou ocamlopt avec la ligne de commande suivante, puis on exécute le binaire produit avec la deuxième ligne (sans les dollars qui représentent le prompt de la ligne de …afficher plus de contenu…
Il utilise un code à longueur variable pour représenter un symbole 𝑎 P Σ
(un caractère ASCII dans le cas de données de type texte). Le code est déterminé à partir d’une estimation des probabilités d’occurrence des symboles, un code court étant associé aux symboles les plus fréquents. Le codage de Huffman est un code optimal, au sens de la plus courte longueur.
L’algorithme du codage de Huffman, sur un texte t, construit un arbre binaire 𝐴Hptq appelé arbre de Huffman. Cet arbre permet de définir un codage binaire d’un texte t composé de caractères d’un alphabet Σ (on s’intéressera uniquement à Σ “ J0; 255K l’alphabet ASCII 256 dans ce TP). Les feuilles de cet arbre 𝐴H correspondent aux caractères 𝑎 du texte t avec …afficher plus de contenu…
À noter que cet arbre n’est pas unique. Il dépend de l’ordre des feuilles dans la liste initiale
(par exemple, deux caractères de même fréquence peuvent être permutés).
Définition : Une forêt d’arbres binaires est un ensemble d’arbres binaires.
Algorithme : Codage de Huffman, fonction CodageHuffman(t)
Entrées : un texte t sur un alphabet Sigma (ASCII 256)
Sortie : L’arbre de Huffman A_H(t) associé au texte t
Calculer les fréquences f_a de chaque symbole a dans Sigma selon son nombre d’apparition dans le texte t ;
Créer une forêt F d’arbres binaires, chacun réduit à un seul nœud
(f_a, a) pour tout a dans Sigma