This commit is contained in:
glenux 2005-10-31 08:21:06 +00:00
parent ce438efb57
commit 906a4b4ace
5 changed files with 486 additions and 1 deletions

View file

@ -166,7 +166,7 @@ AC_SUBST(TARGET_HAVE_READLINE)
#AC_SUBST(LIBXMLPP_LIBS)
AC_CONFIG_FILES([Makefile src/Makefile src/lib/Makefile src/tools/Makefile])
AC_CONFIG_FILES([Makefile src/Makefile src/lib/Makefile src/rle1/Makefile src/rle2/Makefile])
AC_OUTPUT
dnl configure.in ends here

View file

@ -0,0 +1,144 @@
<?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 &laquo;formats de documents et compression&raquo; 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
&laquo;compressées&raquo;; 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>&lt;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>

341
doc/enonce/cours.css Normal file
View file

@ -0,0 +1,341 @@
DIV.resultat {
font-family: helvetica, sans-serif;
border-width: 1px 1px 1px 1px;
background-color: #ccffcc;
color: black;
margin-left: 0em;
margin-right: 0em;
margin-top: 0em;
margin-bottom: 0em;
padding-bottom: 0em;
}
DIV.resultat OL {
list-style-type : decimal;
}
DIV.resultat UL {
list-style-type : disc;
}
DIV.resultat P DEL {
text-decoration : line-through;
}
DIV.resultat P INS {
text-decoration : underline;
}
DIV.resultat H1 {
font-size: 18pt;
font-weight: normal;
background-color: #ccffcc;
color: black;
}
DIV.resultat H2 {
font-size: 14pt;
font-weight: normal;
background-color: #ccffcc;
color: black;
}
DIV.resultat P {
background-color: #ccffcc;
color: black;
}
DIV.resultat Q {
font-weight: bold;
}
DIV.resultat BLOCKQUOTE {
color: green;
font-weight : bold;
}
DIV.resultat ABBR {
background-color: white;
color: green;
}
DIV.resultat ACRONYM {
background-color: white;
color: red;
}
BODY {
font-size : 12pt;
font-family : helvetica, sans-serif;
text-align : justify;
background-color: #e7f7e0;
background-image: url(/~yunes/images/fond.gif);
color: black;
}
A:link {
color : blue;
text-decoration : none;
}
A:visited {
color : navy;
text-decoration : none;
}
A:active {
color : red;
text-decoration : none;
}
A.fin:link, A.fin:visited, A.fin:active, A.fin:hover {
color : #e7f7e0;
background-color : #e7f7e0;
}
DIV.titre {
border-width: 1px 1px 1px 1px;
background-color : #f0fff0;
background-image: url(/~yunes/images/fond-titre.gif);
color: black;
text-align: center;
margin: 0em 0em 0em 0em;
padding-bottom: 0em;
}
DIV.titre H1 {
margin-top: 0.5em;
margin-bottom: 0em;
padding-bottom: 0em;
padding-top: 0em;
text-align: center;
font-weight: bold;
font-size : 24pt;
}
DIV.titre P {
margin: 0em 0em 0em 0em;
padding: 0em 0em 0em 0em;
background-color : #f0fff0;
background-image: url(/~yunes/images/fond-titre.gif);
text-align : center;
font-weight : bold;
}
DIV.titre P.gros {
font-size : 24pt;
}
DIV.tdm {
border-width: 1px 1px 1px 1px;
background-color: #b0bfb0;
color: black;
margin-left: 0em;
margin-right: 0em;
margin-top: 0em;
margin-bottom: 0em;
padding-bottom: 0em;
}
H1 {
margin-top: 0.5em;
margin-bottom: 0em;
padding-bottom: 0em;
padding-top: 0em;
font-size : 24pt;
font-family : helvetica, sans-serif;
background-color: #b0bfb0;
color: black;
font-weight : bold;
}
H2 {
font-size : 16pt;
font-family : helvetica, sans-serif;
font-weight : bold;
background-color: #b0bfb0;
color: black;
}
H3 {
font-size : 14pt;
font-family : helvetica, sans-serif;
font-weight : bold;
}
H4 {
font-size : 12pt;
font-family : helvetica, sans-serif;
font-weight : bold;
}
H5 {
font-size : 12pt;
font-family : helvetica, sans-serif;
font-weight : normal;
text-decoration : underline;
}
P {
font-size : 12pt;
font-family : helvetica, sans-serif;
text-align : justify;
background-color: #e7f7e0;
background-image: url(/~yunes/images/fond.gif);
color: black;
}
P.date {
font-size : 8pt;
font-family : helvetica, sans-serif;
}
P.myquote {
margin-top : 0em;
margin-bottom : 0em;
margin-left : 3em;
margin-right : 1em;
}
P.note {
font-size: 10pt;
color: black;
background-color: #ff8888;
background-image: none;
}
P.rem {
color: black;
background-color: #efffef;
background-image: none;
margin-left: 1em;
}
P.message {
font-size : 18pt;
background-color: #cc0000;
color: #ffffff;
background-image: none;
}
TABLE {
font-size : 12pt;
background-color: #d7e7d0;
}
OL.numeroted {
font-size:12pt;
font-family : helvetica, sans-serif;
list-style-type : decimal;
}
OL {
font-family : helvetica, sans-serif;
font-size:12pt;
list-style-type : decimal;
text-align : justify;
}
DL {
font-size:12pt;
font-family : helvetica, sans-serif;
text-align: justify;
}
UL {
font-size:12pt;
font-family : helvetica, sans-serif;
list-style-type : none;
text-align: justify;
}
UL.disc {
font-size:12pt;
font-family : helvetica, sans-serif;
list-style-type : disc;
}
UL SUP {
font-size: 10pt;
}
ADDRESS {
font-size: 8pt;
font-family : helvetica, sans-serif;
}
PRE {
font-family: Terminal, courier, monospace;
font-size: 10pt;
background: #e0e0e0;
border-width: 1px 1px 1px 1px;
border-style: none;
white-space: pre;
text-align: left;
}
.tag, .exc, .pkg, .jclass, .event, .mac, .fct, .macro, .src, .symb {
font-size: 12pt;
font-family: Terminal, courier, monospace;
background-color : white;
}
.def {
font-size: 12pt;
font-family: Terminal, courier, monospace;
background-color : white;
}
.opt, .com, .code, .litteral, .signal {
font-size: 12pt;
font-family: Terminal, courier, monospace;
background-color : white;
}
PRE .typing {
background-color: white;
color: black;
}
PRE .comment {
font-size: 10pt;
background-color: #c0c0c0;
color: black;
}
.type, .field {
font-size: 12pt;
font-family: Terminal, courier, monospace;
background-color: white;
color: #aa2211;
}
VAR {
font-size: 12pt;
font-family: courier, monospace;
font-style: italic;
background-color: white;
}
.var {
font-size: 12pt;
font-family: courier, monospace;
font-style: italic;
background-color: white;
}
.cst {
font-size: 12pt;
font-family: Terminal, courier, monospace;
font-weight: bold;
background-color: white;
color: #333333;
}
.car, .file, .string {
font-size: 12pt;
font-family: Terminal, courier, monospace;
background-color : white;
}
SPAN.author {
font-weight: bold;
}
SPAN.title {
font-style: italic;
font-size: 13pt;
}
A {
text-decoration: none;
}
kbd {
background-color: white;
color: black;
}
DIV.adresse {
font-family : Terminal, courier, monospace;
background-color : #999999;
border-width : 5px 5px 5px 5px;
border-style : none;
padding : 1em 1em 1em 1em;
width : 95%;
text-align : left;
font-size : 10pt;
font-style : normal;
}
IMG.carte {
display : block;
float : right;
}
.exemple {
background-color: #dddddd;
}
DIV.todo {
background-image: none;
background-color : #ffdddd;
border-width : 1px 1px 1px 1px;
border-style : solid;
padding : 0em 1em 0em 1em;
width : 90%;
text-align : justify;
}
DIV.todo P {
background-image: none;
background-color : #ffdddd;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB