Introduction

Le rendu du TP noté doit se faire sur arche

Il est conseillé de traiter la question 3, elle pourrait être utile le jour de l'examen final (pas du TP)

Les fichiers nécessaires à la résolution des questions se trouvent ici.

Voici le rendu attendu pour chacune des questions:

Q1 Un fichier .c
Q2 Le résultat de la décompression des 4 fichiers
Q3 Un fichier .c Trois fichiers png
Q4 Un fichier .c
Q5 Un fichier .c Le résultat de la compression du fichier lucky
Q6 Un fichier .c Le résultat de la compression du fichier lucky
Q7 Un fichier .txt répondant à la question

Le but du TP noté est d'implémenter un compresseur/décompresseur LZ77/LZSS.

Pour avoir une note correcte, il est attendu a minima une réponse aux question 1,2,3 et 7, ou 2,3,4 et 7.

Le travail doit être effectué seul. Il est possible de récupérer des fichiers venant des TPs précédents. L'usage d'internet est restreint à l'accès aux pages concernant le cours.

Tout non-respect des consignes sera sanctionné. En particulier, si le travail n'a pas été effectué seul, une pénalité d'un minimum de 20 points sera appliquée.

Prenons l'exemple de la représentation de ab(2,3)d(6,8)(5,4). Il y aura trois blocs:

Q1. Ecrire l'algorithme de décompression. On supposera pour simplifier que la taille du résultat est plus petite que 100000 octets, de sorte qu'on pourra la mettre dans un tableau char text[100000]; déclaré en variable globale
Q2. Tester le résultat du programme sur les fichiers lucky.lzo, texte.lzo (un texte), logo.pgm.lzo (un logo) et photo.ppm.lzo (une photo).
Q3. Pour chacun des 3 fichiers, calculer, pour chaque position p, combien de fois elle apparaît dans le fichier. Pour avoir un graphique plus facile à lire, on groupera ensemble les positions par paquets de 10: de 0 à 9, de 10 à 19, etc.. On affichera le résultat sous la forme d'un fichier png. On pourra commencer par regarder le fichier toto.dat et lancer la commande gnuplot toto.plot.
Q4. Ecrire, dans le fichier tests.c, la fonction communs(char* x, char* y, int n) qui indique le nombre de caractères en commun au début des chaînes de caractères x et y (avec un maximum de n)
Q5. Utiliser la fonction précédente pour créer un logiciel de compression. Pour cette question, on ne cherchera pas à "regrouper" ensemble les blocs.
Q6. Changer le programme de la question précédente pour qu'il regroupe les littéraux et les paires par blocs.
Q7. On se donne un fichier de départ, dont la taille est exactement 1000 octets. Montrer qu'il est possible de le compresser en un fichier .lzo dont la taille est exactement 1126 octets, par un programme qui n'utilise PAS bits.h et bits.c. (Il n'est pas demandé de réaliser le programme).