144 lines
6 KiB
HTML
144 lines
6 KiB
HTML
<?xml version="1.0" encoding="iso-8859-1"?>
|
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
|
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
|
|
<head xml:lang="fr" lang="fr">
|
|
<title>TP - Documents et compression - M2-SRI</title>
|
|
<meta content="text/html; charset=iso-8859-1" />
|
|
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
|
<meta name="description" content="Sujet de la première séance de travaux
|
|
pratiques du cours de «formats de documents et compression» du
|
|
master 2 II - SRI" />
|
|
<meta name="Author" content="Jean-Baptiste Yunès"/>
|
|
<meta name="keywords" content="TP,compression" />
|
|
<link href="../cours.css" rel="stylesheet" type="text/css" />
|
|
</head>
|
|
|
|
<body>
|
|
|
|
<div class="titre">
|
|
<h1>Formats de documents et compression - TP 1</h1>
|
|
</div>
|
|
|
|
<div class="tdm">
|
|
<h2>Sujet</h2>
|
|
</div>
|
|
|
|
<p>On se propose de réaliser, par étapes successives, un logiciel de
|
|
(dé)compression basé sur la technique RLE et le code de Golomb.</p>
|
|
|
|
<h2>Le RLE</h2>
|
|
|
|
<p>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:</p>
|
|
<ul class="disc">
|
|
<li>pour toute répétition suffisamment longue, la longueur de la suite et
|
|
la valeur répétée,</li>
|
|
<li>pour toute répétition trop courte, la suite de valeurs sans
|
|
modification.</li>
|
|
</ul>
|
|
<p>Un tel codage nécessite en pratique d'insérer dans la suite construite des
|
|
marqueurs permettant de réaliser le décodage.</p>
|
|
|
|
<p>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.</p>
|
|
|
|
<p class="exemple">La suite <code>aaaaabcbaaaaaabbbbbb</code> (de longueur 20)
|
|
pourraît être
|
|
encodée de façon à produire la suite <code>[RLE]5abcb[RLE]6a[RLE]6b</code> (de
|
|
longueur 12).</p>
|
|
|
|
<div class="todo">
|
|
<p><strong>1.</strong> 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 <code>.rl1</code>. Ce
|
|
programme devra en outre produire en sortie le taux de compression obtenu.</p>
|
|
|
|
<p>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.</p>
|
|
|
|
<p>On testera ce programme sur une variété de fichiers communs: texte
|
|
français, binaire, bitmap d'image, etc.</p>
|
|
</div>
|
|
|
|
<p>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.</p>
|
|
|
|
<p class="exemple">La suite <code>00000100110000000101011</code> peut être
|
|
représentée par la suite <code>52071100</code>.</p>
|
|
|
|
<div class="todo">
|
|
<p><strong>2.</strong> É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
|
|
<code>.rl2</code>.</p>
|
|
</div>
|
|
|
|
<div class="todo">
|
|
<p><strong>3.</strong> 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.</p>
|
|
</div>
|
|
|
|
<div class="todo">
|
|
<p><strong>4.</strong> 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.</p>
|
|
</div>
|
|
|
|
<h2>Le code de Golomb</h2>
|
|
<p>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; <em>i.e.</em> comment coder la suite <code>52071100</code> ? Le code
|
|
de Golomb permet de construire un codage de longueur variable permettant
|
|
d'obtenir une compression raisonnablement efficace.</p>
|
|
|
|
<h3>Code de Golomb<sub>d</sub></h3>
|
|
<p>Pour l'entier <var>n</var>, Golomb<sub>d</sub>(<var>n</var>) est construit
|
|
par concaténation du codage unaire du quotient de <var>n</var>/d et du codage
|
|
binaire tronqué du reste de <var>n</var>/d.</p>
|
|
|
|
<p>Le codage unaire d'un entier <var>i</var> est une suite de <var>i</var>
|
|
<code>1</code> suivie d'un <code>0</code>. Le nombre <code>5</code> se code
|
|
donc <code>111110</code>.</p>
|
|
|
|
<p>Le codage binaire tronqué de l'entier <var>i</var>,
|
|
CBT<sub>d</sub>(<var>i</var>) est obtenu de la façon suivante:</p>
|
|
<ul class="disc">
|
|
<li>On appelle <var>c</var> la partie entière supérieure du logarithme en
|
|
base 2 de d, <em>i.e.</em> le nombre de bits utiles pour écrire d en binaire
|
|
(par exemple pour 5, <var>c</var>=3).</li>
|
|
<li>si <var>i</var><2<sup><var>c</var></sup>-d, <var>i</var> sera codé en
|
|
employant <var>c-1</var> bits.</li>
|
|
<li>sinon <var>i</var> sera codé par les <var>c</var> derniers bits de
|
|
2<sup><var>c</var></sup>-(d-<var>i</var>).</li>
|
|
</ul>
|
|
<p>Ainsi pour d=5, le codage du nombre 23 sera <code>11110110</code>, car
|
|
<code>11110</code> est le codage unaire de 4 (23/5=4) et <code>110</code> le
|
|
codage sur 3 bits de 6 (on cherche CBT<sub>5</sub>(3), on sait que
|
|
2<sup>3</sup>-(5-3)=6).</p>
|
|
|
|
<p>Comment déterminer une valeur adéquate pour d ? Il
|
|
suffit de prendre la médiane de la suite à coder.</p>
|
|
|
|
<div class="todo">
|
|
<p><strong>5 (difficile).</strong> Écrire un programme permettant de coder et
|
|
décoder tout fichier considéré comme une suite de bits en utilisant le code de
|
|
Golomb.</p>
|
|
</div>
|
|
<hr />
|
|
<div class="todo">
|
|
<p>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.</p>
|
|
</div>
|
|
|
|
<p><a class="fin" href="http://validator.w3.org/check/referer"><img
|
|
src="/~yunes/graphics/vxhtml10" alt="Valid XHTML 1.0!"
|
|
/></a><a class="fin" href="http://jigsaw.w3.org/css-validator/"><img
|
|
src="/~yunes/graphics/vcss.gif" alt="Valid CSS!" /></a></p>
|
|
</body>
|
|
</html>
|