Projet de Développement - PrDv
EPFC - ULB
Bachelier en Informatique 2012
La compression de fichiers par codage de Huffman
1) Le projet
Le but du projet est de réaliser un logiciel de compression de fichiers, comme WinZip ou WinRar,
en utilisant le codage de Huffman
1
. Le principe du codage de Huffman est de choisir une
représentation de l’information de longueur variable permettant ainsi de représenter des symboles
apparaissant fréquemment par une représentation courte, quitte à ce que certains symboles peu
fréquents disposent, eux, d'une représentation plus longue.
Pour la compression de fichiers, les symboles peuvent être les caractères (ou plus généralement, les
octets) contenus dans le fichier. Pour simplifier la suite, nous parlerons de fichiers textes et de
caractères, même si l'algorithme s'appliquera également aux autres situations.
Le codage de Huffman est donc un codage symbole par symbole, sans perte d’information. Il peut
être montré qu’en ce sens, il est optimal. Tous les logiciels de compression populaires utilisent,
d’une façon ou d’une autre, ce codage.
2) Exercice préparatoire : Entrées/Sorties bit par bit
Une caractéristique d'un programme mettant en œuvre le codage de Huffman pour compresser des
fichiers est la nécessité de lire et d'écrire, dans un fichier, des séquences binaires de longueur
variable. C'est une difficulté particulière car les langages de programmation ne prévoient,
normalement que des Entrées/Sorties (E/S) fixes (ou, éventuellement, des E/S de chaînes de
caractères qui, elles, peuvent être de longueur variable). Tant au niveau des accès mémoire que des
E/S, la plus petite unité adressable des ordinateurs actuels est l'octet (séquence de 8 bits). Toute
donnée est donc normalement représentée par un multiple d'un octet. Ce n'est plus le cas pour un
codage de Huffman. Nous aurons donc besoin de nous construire une librairie de routines, capable
de traiter, un bit à la fois, les informations en E/S. Nous allons donc faire de l'algèbre binaire.
2.1
Les opérateurs binaires
Le langage Pascal, comme la plupart des langages de programmation, dispose de plusieurs
opérateurs permettant de faire de l'algèbre binaire. En Pascal, certains de ces opérateurs s'écrivent
de la même façon que les opérateurs logiques que vous connaissez. Attention de ne pas les
confondre : Les opérateurs logiques s'appliquent à des opérandes Booléens alors que les opérateurs
binaires s'appliquent aux entiers. Les opérateurs binaires sont :
Opérateur Opération Exemple
not Négation binaire (inversion de chaque bit) not x
and Et bit à bit (bit résultat à 1 ssi les 2 bits correspondants le sont) x and y
or Ou bit à bit (bit résultat à 0 ssi les 2 bits correspondants le sont) x or y
xor Ou exclusif bit à bit (bit résultat à 0 ssi les 2 bits correspondants sont égaux)
x xor y
shl Décalage binaire vers la gauche d'un certain nombre de bits x shl y
shr Décalage binaire vers la droite d'un certain nombre de bits x shr y
1
http://fr.wikipedia.org/wiki/Codage_de_Huffman