Vous êtes sur la page 1sur 2

Universit de Nice-Sophia Antipolis UE Automates & Langages TP n5 Compression de texte

Licence 3 Informatique 20112012

Avant daborder ce TP, terminez rapidement celui sur les codes dHuffman si ce nest dj fait. Ces algorithmes sont de grands classiques, sachez les programmer jusquau bout ! Aujourdhui, nous vous proposons dimplanter lalgorithme de Lempel-Ziv dans sa version dorigine datant de 1977 ainsi appele LZ77. Cet algorithme fait lobjet de trs nombreuses variantes (LZ78, LZW, LZSS etc), cest lune delles quexcute la commande gzip dU NIX. Il sagit, comme pour les codes dHuffman, de compression de texte sans perte. En revanche cette fois-ci, aucune analyse statistique du texte nest requise et la compression est faite la vole. Cet algorithme de compression est bas sur une simple reconnaissance de motif dans un texte, ce que vous connaissez dj.

Lalgorithme LZ77
Le principe de lalgorithme est le suivant. Deux fentres conscutives vont parcourir cte cte le texte comprimer. La premire est la fentre de recherche ou searchWindow ; la seconde est la fentre de lecture ou lookAheadWindow. A chaque nouvelle position de ces deux fentres conscutives, on cherche le plus long motif qui est la fois prxe de la fentre de lecture et qui apparat comme facteur de la fentre de recherche. Quelle que soit la longueur du motif trouv (ce peut tre 0 pour un motif rduit ), linformation retourne est sous la forme dun triplet. Ensuite, les deux fentres jointes avancent sur le texte en fonction de la longueur du motif trouv.

Exercice 1 : la recherche dun motif


1. Recueillez sur la page web du cours (http ://deptinfo.unice.fr/julia/AL) les deux chiers du jour. 2. Les tailles de la fentre de recherche (searchWindowLen) et de la fentre de lecture (lookAheadWindowLen) sont xes au dpart. La premire atteint progressivement sa taille normale aprs le dbut de texte et la taille de la seconde va dcrotre en bout de texte. Leurs positions respectives sont gres par de simples indices. Compltez les instructions qui grent le dplacement des fentres. 3. Compltez prsent la partie du programme qui consiste chercher dans la fentre de recherche le plus long motif qui est la fois prxe de la fentre de lecture et facteur de la fentre de recherche. On utilisera largement les possibilits de la classe String, histoire de ne pas rimplanter la recherche de motifs dans un texte !

Exercice 2 : la fabrique de triplets


La classe Tuple permet la fabrication des triplets. Le triplet (offset, matchLength, nextChar) est calcul partir du motif trouv et renferme les informations suivantes : 1. offset est le nombre de caractres parcourir rebours partir de la premire case de la fentre de lecture pour trouver le dbut de loccurence du motif dans la fentre de recherche, 0 si le motif est rduit ; 2. matchLength est la longueur du motif en question ; 3. nextChar est le 1er caractre qui suit le motif dans la fentre de lecture et qui empche tout allongement du motif. 1

Compltez la partie de programme concernant le calcul des triplets.

Exercice 3 : le dcodage
Ici, le dcodage est un vrai jeu denfants ... ce qui est lun des points forts de cette mthode. 1. On prend squentiellement en entre la collection de triplets crs lors de la compression et on btit le texte initial partir de ces informations. Deux cas se prsentent : la composante matchLength du triplet courant gale 0 : on concatne alors le nextChar correspondant au texte en cours de dcompression ; la composante matchLength du triplet courant est diffrente de 0 : en reculant dans le texte de offset caractres, il faut extraire le facteur voulu de longueur matchLength, le concatner au texte en cours de dcompression sans oublier dy ajouter aussi le caractre nextChar. Il ne vous reste plus qu complter la partie dcodage. 2. En situation relle (manipulation de bits), quel taux de compression aurions-nous obtenu ? Ce taux est-il meilleur ou moins bon que celui obtenu avec les codes dHuffman sur un texte en franais ?