INF-145 Programmation avancée et langage C Automne 2013 / Page 2
3 Description de l’algorithme de compression de Lempel Ziv
Welch
Voici l’algorithme général suivi d’une trace pour bien saisir son fonctionnement :
chaîne : t_chaîne // Une chaîne pouvant contenir '\0'.
caractère : t_caractère // Un caractère non signé.
dictionnaire : t_dictionnaire // Un dictionnaire de chaînes.
ajouter tous les codes ASCII au dictionnaire
tant que (on peut lire un caractère dans le fichier source)
caractère lire_un_caractère(fichier_source)
si (dictionnaire contient la chaîne chaîne+caractère) alors
chaîne chaîne+caractère // On concatène les deux.
sinon
si (le dictionnaire contient moins de 2
12
chaînes) alors
ajouter chaîne+caractère dans le dictionnaire
fin si
écrire le code de chaîne dans le fichier destination
chaîne caractere;
fin si
fin tant que
écrire le code de chaîne dans le fichier destination
Pour bien saisir l’exemple qui suit, il faut savoir que lorsqu'on écrit le code de la
chaîne dans le fichier destination, celui-ci prend 12 bits. En effet, l’objectif de
l’algorithme est de trouver des chaînes qui se répètent et de les remplacer par un
nombre (un code). Puisqu’il y a en partant 256 chaînes possibles (les codes ASCII),
on ne peut pas conserver ces codes sur 8 bits. Nous encoderons donc les chaînes sur
12, 13 ou 14 bits (arbitrairement, nous choisissons 12). Voici un exemple de
fonctionnement de l’algorithme où les écritures dans le fichier destination sont
présentées sous forme de lettres et de bits pour mieux comprendre :