Siphaxay Didier
Programmation fonctionnelle CAML Projet P1
1 Pr´esentation g´en´erale
1.1 Introduction
L’objectif de ce projet est la r´ealisation d’un algorithme de compression / d´ecompression bas´e sur
les arbres de Huffman. Pour am´eliorer l’efficacit´e de cette technique, deux autres m´ethodes lui seront
adjointes : la m´ethode de Burrows-wheeler ainsi que celle du ”Move-to-Front”.
Pour compresser des donn´ees, on utilise une compression par arbre (m´ethode d’Huffman). Celle ci
peut se d´ecomposer ainsi : on va d’abord s´eparer la donn´ee source en unit´es de mˆeme taille (e.g. des
caract`eres) et associer chacune de ces unit´es `a sa multiplicit´e dans dans la donn´ee source. Cette m´ethode
est ainsi semi-adaptative, en effet on analyse une premi`ere fois le document afin d’extraire des statistiques
sur les unit´es que l’on range dans l’arbre d’huffman pour pouvoir mieux optimiser la compression. Il existe
bien d’autres m´ethodes qui sont bas´es soit sur la fr´equence d’apparatition de l’unit´e dans une langue soit
d’autres param`etres.
Pour retrouver l’ordonnancement de ces unit´es, on va se servir d’une suite de bits qui nous permettra
de naviguer dans l’arbre ainsi compos´e. Le nombre de bit attribu´e `a une unit´e d´ependra de sa multiplicit´e
dans la donn´ee source, ainsi les unit´es les plus fr´equentes seront cod´es sur un code binaire tr`es court alors
que les donn´ees relativement peu pr´esentes le seront par des codes plus long.
Pour am´eliorer l’efficacit´e de cette m´ethode. on va adjoindre une m´ethode de codage diff´erentiel
qui va ´evaluer les distances entre les unit´es et leurs pr´ec´edentes dans la donn´ees sources. Cette m´ethode
ne compresse pas les donn´ees mais permet d’obtenir une compression plus ´el´ev´es grˆace au codage de
Huffman dans le cas o`u les occurences d’une mˆeme unit´e sont proches. En effet dans ce cas les distantes
sont relativement petites et on obtient donc une sensible augmentation de donn´ee redondantes (gage de
bonne compression pour la compression par arbre). C’est l’objet de la m´ethode ”Move-to-front”.
Enfin pour favoriser la m´ethode pr´ecedente, la m´ethode de ”Burrows-wheeler” entre en jeu. Cette
m´ethode n’est rien d’autre qu’une m´ethode permettant de rapprocher les unit´es identiques entre elles afin
de r´eduire leurs distances relatives dans la donn´ee source. Elle n’engendre elle non plus aucun gain de
compression mais elle est facilement reversible. Cette m´ethode est cependant assez lourde et ne peut ˆetre
appliqu´e `a des donn´ees trop grandes.
1.2 Distribution fournie
Voici le listing des fournitures de l’archive qui a ´et´e mise `a notre disposition pour ce projet.
– main.cmo
– defaut.mli
– defaut.cmi
– defaut.cmo
– huffman.mli
– movetofront.mli
– burrows wheeler.mli
– Makefile
– . . .
Les diff´erents fichiers ”mli” sont des fichiers de sp´ecification que l’on respecte au travers des types `a
adopter pour le codage. Ces derni`eres assurent l’interface entre le programme principal et les diff´erents
modules mis en place.
L’item ”main.cmo” est le fichier objet issue de la compilation du projet. Cet objet est donc la pour
assurer la derni`ere ´etape de la cr´eation de l’´ex´ecutable ”huffman” par le proc´ed´e d’´edition des liens grˆace
`a la commande ”make”. Les phases d’entr´ees-sorties ainsi que l’interaction avec l’utilisateur qui permet
d’appeler les diff´erents modules en mode encodage ou d´ecodage sont implant´ees dans ce fichier.
Les items ”defaut.cmo”, ”defaut.cmi”, ”defaut.mli” sont des fichiers qui permettent de remplacer
les fonctions que l’on doit coder dans le cas d’un malfonctionnement de ces derniers. Ces fichiers ne
permettent aucune compression des donn´ees et servent donc seulement de support pour la compilation.
3