On se propose de réaliser, par étapes successives, un logiciel de
+(dé)compression basé sur la technique RLE et le code de Golomb.
+
+
Le RLE
+
+
Le principe du codage RLE (Run Length Encoding) est d'obtenir à partir
+d'une suite de nombre supposée contenir des répétitions consécutives de mêmes
+valeurs, une suite contenant:
+
+
pour toute répétition suffisamment longue, la longueur de la suite et
+ la valeur répétée,
+
pour toute répétition trop courte, la suite de valeurs sans
+ modification.
+
+
Un tel codage nécessite en pratique d'insérer dans la suite construite des
+marqueurs permettant de réaliser le décodage.
+
+
Il est facile d'observer que, par une telle méthode, certaines suites sont
+«compressées»; la longueur de la suite après codage est plus
+petite que la longueur de la suite originale.
+
+
La suite aaaaabcbaaaaaabbbbbb (de longueur 20)
+pourraît être
+encodée de façon à produire la suite [RLE]5abcb[RLE]6a[RLE]6b (de
+longueur 12).
+
+
+
1. Il est demandé de réaliser dans un langage de
+programmation de votre choix un
+programme d'encodage et de décodage RLE (basé sur le principe précédent). Ce
+programme devra permettre d'encoder tout fichier donné en entrée et produire
+en sortie un fichier dont le nom sera étendu en .rl1. Ce
+programme devra en outre produire en sortie le taux de compression obtenu.
+
+
Ce programme pourra être paramétré de façon à permettre à l'utilisateur de
+choisir ce qu'il considère comme étant un caractère de la suite.
+
+
On testera ce programme sur une variété de fichiers communs: texte
+français, binaire, bitmap d'image, etc.
+
+
+
De nombreuses variantes de ce principe sont utilisées. Par exemple, si la
+suite considérée est une suite de bits, on peut s'intéresser aux suites de 0
+consécutifs situés entre deux 1.
+
+
La suite 00000100110000000101011 peut être
+représentée par la suite 52071100.
+
+
+
2. Écrire un programme (dans le langage de votre choix)
+permettant de coder et décoder tout fichier considéré comme une suite de
+bits. Le fichier résultat sera nommé en utilisant l'extension
+.rl2.
+
+
+
+
3. On étudiera les relations entre cet encodage et le précédent. Du point de
+vue de l'encodage lui-même, de leurs performances relatives, etc.
+
+
+
+
4. On recherchera la spécification de formats courants
+utilisant le codage RLE. On comparera les techniques employées dans ces divers
+formats avec celles réalisées dans ce TP.
+
+
+
Le code de Golomb
+
En ce qui concerne le RLE du second type et précédemment décrit le
+problème principal est de trouver un codage adéquat pour la suite des nombres
+produits; i.e. comment coder la suite 52071100 ? Le code
+de Golomb permet de construire un codage de longueur variable permettant
+d'obtenir une compression raisonnablement efficace.
+
+
Code de Golombd
+
Pour l'entier n, Golombd(n) est construit
+par concaténation du codage unaire du quotient de n/d et du codage
+binaire tronqué du reste de n/d.
+
+
Le codage unaire d'un entier i est une suite de i
+1 suivie d'un 0. Le nombre 5 se code
+donc 111110.
+
+
Le codage binaire tronqué de l'entier i,
+CBTd(i) est obtenu de la façon suivante:
+
+
On appelle c la partie entière supérieure du logarithme en
+ base 2 de d, i.e. le nombre de bits utiles pour écrire d en binaire
+ (par exemple pour 5, c=3).
+
si i<2c-d, i sera codé en
+ employant c-1 bits.
+
sinon i sera codé par les c derniers bits de
+ 2c-(d-i).
+
+
Ainsi pour d=5, le codage du nombre 23 sera 11110110, car
+11110 est le codage unaire de 4 (23/5=4) et 110 le
+codage sur 3 bits de 6 (on cherche CBT5(3), on sait que
+23-(5-3)=6).
+
+
Comment déterminer une valeur adéquate pour d ? Il
+suffit de prendre la médiane de la suite à coder.
+
+
+
5 (difficile). Écrire un programme permettant de coder et
+décoder tout fichier considéré comme une suite de bits en utilisant le code de
+Golomb.
+
+
+
+
Le TP devra être rédigé (sous la forme de documents HTML) et rendu avec les
+codes sources des programmes; ce au plus une semaine après la séance.