Codage de Huffman
Objectif : Implanter l'algorithme de construction
du code de Huffman associé à la distribution des caractères
d'un fichier texte ainsi que les opérations d'entrée/sortie
relatives aux arbres binaires. Les structures sont données à
titre indicatif dans la section [1], pour mémoire l'algorithme
de Huffmann est en section [ 5 ].
Durée : 6 heures.
Mots clefs : arbre binaire, codage de Huffmann, compression..
[ 1 ] Structures
typedef struct noeud{ int poids; char car;[ 2 ] Première séance
struct noeud *gauche, *droit} NOEUD, *ARBRE;typedef ARBRE HAIE[256];
typedef int TABLE[256];
TABLE Distribution( FILE *src)
Il s'agit de calculer la distribution des lettres d'une source.ARBRE Huffman( TABLE t )
Arbre de Huffmann de la distribution tvoid Code( ARBRE a )
imprime le code préfixe associé à l'arbre a
[ 3 ] Deuxième séance
char * ArbreVersChaine( ARBRE a )[ 4 ] Complément
construit une représentation préfixe de l'arbre a.ARBRE ChaineVersArbre( char * s)
opération inverse de la précédente.void AfficheTexte( ARBRE a)
imprime le squelette de l'arbre a en mode texte,
void AfficheTeX( ARBRE a)
comme AfficheTexte mais avec du code TeX-PS-tricks.
[ 5 ] Algorithme
Huffmann( TABLE t )
HAIE h
INDICE i, n;
DEBUT
n := TAILLE( t )
i := 1;
initialisation de la haie.
TANT QUE ( i <= n )
h[i] := InitArbre( i, t[i] );
INC( i );
FTQ
par fréquence décroissante
TRIER( h , n );i : = n
TANT QUE ( i > 1 )
on greffe les noeuds les moins fréquents
h[i - 1] := Greffe( h[i - 1], h[i] );
remise en ordre
ORDONNER( h, i );
DEC( i );
FTQ
RETOURNER h[ 1 ]
FIN
[ 6 ] Liens