You are on page 1of 19

Chapitre 1

Codage et Compression de donnes


Avant dintroduire la notion de compression, nous allons survoler quelques codes relativement courants. Nous allons dans un premier temps considrer la notion de code au sens large.
Nous dirons donc quil sagit dune rgle permettant de convertir une information sous une forme
diffrente de sa reprsentation initiale.
Ainsi, on peut scinder les codes en plusieurs grands familles (entre autres) :
les codes de communication (Morse, Baudot, Popham,. . . )
les codes de reprsentation (UTF, ASCII, Base64,. . . )
les codes de protection (Cryptographie ancienne, Stganographie)
les codes de compression (Thorie du codage)
les codes didentification (IBAN, EAN, Code-barres,. . . )
Vrifier un code EAN-13 :
Soit le code 764-915481257-7.
1. On calcule dans un premier temps la somme suivante (on utilise les 12 premiers
chiffres du code et on calcule les produits de chacun deux alternativement avec 1
et 3) : 7*1+6*3+4*1+9*3+1*1+5*3+4*1+8*3+1*1+2*3+5*1+7*3=133
2. On dtermine alors le modulo 10 de loppos du rsultat de cette somme :
(-133) mod 10 = 7, ce qui correspond au check digit fourni.
Vrifier un code IBAN
Soit le code BE-43-068999999501.
1. On pratique dans un premier temps une rotation circulaire de 4 caractres vers la
gauche : 068999999501BE43
2. On convertit ensuite les lettres de la faon suivante : A=10, B=11,. . . Z=35 :
068999999501111443
3. On calcule enfin le modulo 97 de ce nombre. Sil est gal 1, le check digit est
valide : 068999999501111443 mod 97 = 1.
1

Structure de linformation

Cette liste est trs subjective et volontairement incomplte. Elle permet cependant de rendre
compte de lventail de matires touches par la notion de codage, qui nest pas donc pas uniquement synonyme de compression.
Dans le cadre de ce cours, nous introduirons quelques codes de reprsentation rpandus ainsi
que quelques techniques de compression.

1.1
1.1.1

Les tables de caractres


ASCII

Le code ASCII (American Standard Code for Information Interchange) est un code de 7 bits
(de donnes) et dun bit de parit par symbole. Il date de 1961, et fut cr par Bob Bemer. 128
(= 27 ) symboles peuvent donc tre cods. On y retrouve les lettres majuscules et minuscules,
les 10 chiffres, quelques symboles de ponctuation et des caractres de contrle.

Fig. 1.1 Table ASCII basique


On entend rgulirement parler du code ASCII tendu (extended ASCII ). Ce code nest
en ralit pas clairement dtermin, en ce sens quil nest pas unique, plusieurs variantes non
compatibles ayant t publies. Les plus courantes sont le code ASCII tendu OEM (1.2) et le
code ASCII tendu ANSI (1.3). Lobjectif principal tait de permettre lutilisation des caractres
accentus, absents de la table ASCII basique. Chaque caractre y est reprsent par une chaine
de 8 bits.

1.1.2

EBCDIC

Il sagit dun mode de codage des caractres sur 8 bits cr par IBM lpoque des cartes
perfores. De nombreuses versions existent, bien souvent incompatibles entre elles, ce qui est en
partie la cause de son abandon. On lutilise encore de nos jours, mais presque essentiellement
pour des raisons de rtro-compatibilit.

Dumont Renaud

Support Compression et Stockage

Structure de linformation

Fig. 1.2 Table ASCII tendue OEM

Fig. 1.3 Table ASCII tendue ANSI

Fig. 1.4 Table EBCDIC

1.1.3

ISO 8859-1 (et -15)

Cest une norme de lInternational Organization for Standardization, souvent dnomme


Latin-1. Elle se compose de 191 caractres cods sur un octet. Cette norme recouvre les caractres
plus utiliss dans les langues europennes et dans une partie des langues africaines.
Comme on le voit sur la figure 1.5, certaines plages ne sont pas utilises : les codes 0x00
0x1F et 0x7F 0x9F ne sont pas attribues.
Pour permettre lutilisation du sigle , il a fallu mettre cette table jour. La norme ISO
8859-15 est alors apparue. Elle se compose des mmes lments que la norme ISO 8859-1, mis
part 8 caractres, illustrs la figure 1.6.

Dumont Renaud

Support Compression et Stockage

Structure de linformation

Fig. 1.5 Table ISO 8859-1

Fig. 1.6 Diffrences entre les normes 8859-1 et 8859-15

1.1.4

Unicode

Ce projet fut initi en 1987 par Becker, Collins et Davis. Lobjectif tait alors de construire
un code universel sur 16 bits, permettant donc 65,536 (216 ) codes diffrents. En 1991 est fond
le consortium Unicode, comprenant des linguistes et autres spcialistes de nombreux horizons.
La norme Unicode est, en plus dun standard de codage de caractres, un immense rapport des
recherches mondiales sur les langues utilises et ayant t utilises travers le monde. Unicode

Fig. 1.7 Ecriture cuniforme dans une table UNICODE


en est actuellement la version 5.0, le nombre de caractres identifies tant sans cesse croissant.
La version 3.0 (1999) comptait dj 49.194 caractres, la limite des 216 tant dj bien proche.
En 2001, la version 3.2 ajouta un peu moins de 45.000 caractres. Lespace des codes Unicode
Dumont Renaud

Support Compression et Stockage

Structure de linformation

stend de 0 0x10FFFF. Un code sur 16 bits nest donc plus suffisant. Le codage sur 4 octets
permet la reprsentation de plus de 4 milliards de caractres (232 ).
On y retrouve le code ASCII, auquel on a notamment ajout les jeux complets de caractres
corens, japonais et chinois, mais aussi les symboles mathmatiques ou encore les critures anciennes telles que lcriture cuniforme ou le linaire B.
Plusieurs formats dencodage sont possibles (UTF - Universal Transformation Format) :
UTF-8 : 8 bits
UTF-16 : 16 bits
UTF-32 : 32 bits
Le standard Unicode dfinit les caractres comme une srie de points de code (codepoints).
Selon le format utilis, sa reprsentation sera diffrente.
1.1.4.1

UTF-8

Les codepoints encods sous ce format se prsentent comme un octet ou une suite doctets.
Lorsque le caractre se situe dans la plage 0x00 0x7F, il sagit du code ASCII, ce qui ne
pose pas de problme pour le reprsenter sur un seul octet. Pour les autres valeurs, un premier
octet (lead byte) suivi dun nombre variable doctets (trailing byte)(maximum 4 octets au total)
reprsentent conjointement la valeur encoder.
Dans le cas o on utilise un lead byte, celui devra toujours avoir son bit de poids fort 1,
et sera suivi dautant de bit 1 que de trailing byte.
Format du premier octet
110.....
1110....
11110...

Nombre doctets utiliss au total


2
3
4

Les bits remplacs par - dans le tableau ci-dessus reprsente les bits disponibles pour la
valeur Unicode encoder. Toutefois, chaque trailing byte doit avoir ses deux premiers bits 10.
Ainsi, chaque trailing byte possdera 6 bits dinformation.
Formats possibles
110..... 10......
1110.... 10...... 10......
11110... 10...... 10...... 10......

Nombres de bits quil est possible dencoder


8 11 bits disponibles
12 16 bits disponibles
17 21 bits disponibles

La limite de 21 bits est suffisante pour reprsenter lensemble des codepoints dfinis par
Unicode.
Par cette mthode dencodage, un mme caractre peut avoir plusieurs reprsentations. Par
exemple, le caractre / peut scrire
0x2F
0xC0 0xAF
0xE0 0x80 0xAF

Dumont Renaud

Support Compression et Stockage

Structure de linformation

0xF0 0x80 0x80 0xAF


Depuis la troisime version dUnicode, il a t spcifi que seul lencodage le plus court tait
accept.
1.1.4.2

UTF-16

Les codepoints sont ici exprims sous la forme de mots de 16 bits. La plupart des caractres
courants sont reprsentables sur 16 bits, mais certains ne le sont toutefois pas (la plage adressable Unicode tant tendue jusque 0x10FFFF).
Similairement lUTF-8, il est possible dutiliser plusieurs mots (maximum 2) de 16 bits
afin dencoder des valeurs ncessitant plus de 16 bits.
Afin de dterminer les mots de 16 bits, on a recours au calcul suivant (U reprsente la valeur
Unicode) :
1. Si U < 0x10000, U est encod comme un entier non sign sur 16 bits.
2. Soit U = U - 0x10000. U tant infrieur ou gal 0x10FFFF (par dfinition de la plage
de validit du standard Unicode), U sera infrieur ou gal 0xFFFFF. 20 bits sont donc
ncessaires.
3. Initialiser 2 entiers non signs de 16 bits, W1 et W2, aux valeurs 0xD800 et 0xDC00.
Chaque entier possdera 10 bits libres, qui fourniront au total les 20 bits ncessaires.
4. Associer les 10 bits de poids forts de U aux bits libres de W1, et les 10 autres bits de U
(les 10 bits de poids faibles de U) W2.
Il ny ici quune seule manire de reprsenter un codepoint donn.
1.1.4.3

UTF-32

Les codepoints sont ici reprsents par une valeur sur 32 bits. Cette taille est suffisante pour
reprsenter tous les codepoints Unicode existants.

1.1.5

Base64

Largement utilis pour la transmission de messages, le codage Base64 utilise, comme son
nom le laisse prsager, un alphabet de 64 caractres. Un 65me caractre existe, mais ne fait
pas partie de lalphabet proprement parler. Il est utilis comme caractre final (=).
Le traitement sopre par groupe de 24 bits (3 octets) et produit en sortie un bloc de
4 caractres (4*6 bits). Chaque groupe de 6 bits sert dindex dans lalphabet Base64, et le
caractre associ est plac sur le flux de sortie.
Lorsque le nombre de bits en entre devient insuffisant (le flux dentre est compos de moins
de 24 bits), seules deux possibilits existent (en sachant que lentre ne peut tre constitue que
doctets entiers) :
lentre fournit 8 bits (1 octet) : le bloc de 4 caractres en sortie sera compos de 2
caractres de la table base64 suivis de 2 caractres finaux (cest--dire le 65me caractre).
lentre fournit 16 bits (2 octets) : le bloc de 4 caractres en sortie sera compos de 3
caractres de la table base64 suivis de 1 caractre final.
Dumont Renaud

Support Compression et Stockage

Structure de linformation

Fig. 1.8 Table BASE64

Exemple Le mot oui est traduit sous forme binaire en 01101111 01110101 01101001. Si
on dcoupe ces 24 bits en blocs de 6 bits, il vient 011011 110111 010101 101001. Sous forme
dcimale, on obtient 27 55 21 41, et en substituant, il vient b3Vp.
Lorsquon utilise cet encodage dans le logiciel de chiffrement de messages PGP, le rsultat
est ensuite encod au format ASCII.
Retour lexemple Ainsi, si on met le bit de parit 0, la correspondance de b3Vp est
01100010 00110011 01010110 01110000.

1.2

La compression de donnes

La compression a pour but de rduire la longueur dune chane sans affecter son contenu
informatif. Cela permet la fois de rduire les exigences en mmoire et daugmenter la capacit
dun canal de transmission (thorie de Shannon).
Linformation dun message peut se dfinir comme la "surprise" cause par la connaissance
de ce message. Elle se calcule par la formule
log2 p
si p est la probabilit doccurrence du message. Par simplification dcriture, nous considrerons
prsent que tous les logarithmes seront en base 2.
Soit lensemble X compos de N messages dont les probabilits doccurrence sont donnes
par p1 , ..., pN . Alors
N
X
pi = 1
i=1

Dumont Renaud

Support Compression et Stockage

Structure de linformation

Linformation H associe ces N messages est dfinie comme la surprise moyenne :


H(x) =

N
X

pi log pi

i=1

H(x) permet de mesurer linformation. On lui donne le nom dEntropie.


0H<
et est maximale quand p1 = p2 = ... = pN =

1
N

Indpendance des messages


Soit un ensemble C de messages gal au produit de 2 ensembles A et B indpendants. Alors
H(C) = H(A) + H(B)
En effet,
XX
i

pi qj log pi qj =

X
qj (log pi + log qj )
pi

pi log pi +

pi log pi +

qj log qj

qj log qj

Longueur moyenne dun code


Soit un codage des messages partir dun alphabet de d caractres tel quil existe une
correspondance non ambigu entre chaque message et son code. Si le message i est reprsent
par une squence de li caractres, la longueur moyenne dun code est donne par la formule
suivante :
N
X
L=
pi l i
i=1

Efficacit et redondance dun systme de codage


Par le thorme du codage de Shannon, on peut dfinir lefficacit dun systme de codage.
En effet, par Shannon,
> H(X)
L
log d
et donc

H(X)
log d 6 1
L

qui est la formule dfinissant lefficacit dun systme de codage.


Dumont Renaud

Support Compression et Stockage

Structure de linformation

La redondance est donne par R = 1 efficacit.


Il existe un codage dont lefficacit tend vers 1 ainsi quune mthode de construction.

1.2.1

Codages Statistiques

1.2.1.1

Codage de Huffman

Supposons avoir 8 messages m1 , ..., m8 dont la probabilit doccurrence est donne par p1 =
p2 = ... = p8 = 1/8. Il vient
H(X) =

8
X
1

1
pi log pi = 8. .3 = 3
8

Si lalphabet est quivalent {0,1}, alors d=2 et


> 3 =3
L
1
Donc, le codage 3 bits [000,001,...,111] est efficace1 .
Quand d=2 (et donc que log2 d = 1), H(X) donne
la longueur en bits pour un codage non-redondant, ou encore
le nombre de choix binaires faire en moyenne pour identifier un message.
Si on dispose dune autre distribution P telle que
(               )
2
3
4
5
6
7
7
1
1
1
1
1
1
1 1

,
,
,
,
,
,
,
{pi } =
2 2
2
2
2
2
2
2
alors H(X) = 127
64 et on obtient un codage non-redondant o L est infrieure 2 bits !
Ce codage a en plus le mrite de permettre le dcodage instantan (caractre par caractre,
sans attendre une squence entire). On parle de proprit prfixe : (aucun code nest prfixe
dun autre code).
Exemple :
1.9.

111100111111110 est dcod directement en eahb, partir du codage de la figure

Algorithme du codage de Huffman


1. Les messages constituent les feuilles dun arbre portant chacune un poids gal la probabilit P doccurrence du message correspondant
2. Joindre les 2 noeuds de moindre poids en un noeud parent auquel on attache un poids
gal la somme de ces 2 poids
1 On

dit galement "non-redondant".

Dumont Renaud

Support Compression et Stockage

Structure de linformation

10

Fig. 1.9 Codage de Huffman

3. Rpter le point 2 jusqu lobtention dune seule racine larbre (de poids

pi = 1)

4. Affecter les codes 0 et 1 aux noeuds descendants directs de la racine


5. Continuer descendre en affectant des codes tous les noeuds, chaque paire de descendants recevant les codes L0 et L1 o L dsigne le code associ au parent.
Par exemple, soit un ensemble de 3 messages a, b et c de probabilit respective 0.6, 0.3 et
0.1. La construction de lalgorithme est donne la figure 1.10.

Fig. 1.10 Codage de Huffman


En codant des squences de plus en plus longues, lefficacit tend vers 100% (mais le gain
est de moins en moins important, comme on le voit sur la figure 1.11).
En rsum, lalgorithme de HUFFMAN donne un codage optimal (car la redondance est
minimale) et possde la proprit prfixe (ce qui est intresssant en cas de transmission sur un
Dumont Renaud

Support Compression et Stockage

Structure de linformation

11

Fig. 1.11 Codage de Huffman

canal).
1.2.1.2

Codage de Shannon-Fano

Ce procd est antrieur au codage de Huffman est se base galement sur un codage statistique.

Fig. 1.12 Codage de Shannon-Fano

Algorithme
1. Construire une table des frquences dapparition des symboles trie par ordre dcroissant.
2. Diviser cette table en deux parties. Celles-ci doivent avoir une somme de frquences gale
(ou pratiquement gale) celle de lautre.
3. Affecter le chiffre binaire 0 la moiti infrieure, la moiti suprieure prenant la valeur 1.
4. Rpter les oprations 2 et 3 aux deux parties, jusqu ce que chaque symbole ne reprsente
plus quune partie de la table.
Dumont Renaud

Support Compression et Stockage

Structure de linformation

1.2.2

12

Codage par substitutions

Le codage de HUFFMAN est efficace quand il y a un petit nombre de types de messages


dont quelques-uns couvrent une proportion importante du texte (pi >> pj ). Quand le nombre
de types de messages augmente et que les frquences sont plus uniformes ( pi pj ij), le gain
est ngligeable.
Souvent, le nombre de messages diffrents est indtermin lavance (par exemple quand il
sagit de mots dans un texte simple) ou trop grand pour justifier un codage longueur variable
(par exemple, le jeu de caractres ASCII). Dans ces cas, on effectue une compression en remplaant seulement des squences choisies de texte par des codes plus courts.
Il y a plusieurs faons de procder :
parcourir le texte et remplacer les squences redondantes par des squences plus courtes
(RLE)
analyser pralablement le texte pour dterminer les groupes remplacer et les codes qui
les remplacent (LZW)
...
1.2.2.1

Codage RLE (Variantes)

Le codage RLE (Run-Length Encoding) est, comme son nom lindique, un codage de "course",
cest--dire quil limine certaines squences de caractres en les remplaant par un code spcifique. Chaque "course" de k lments (2 < k 9) est remplace par un caractre non utilis
(ex : @) suivi de lentier k et du caractre substitu.

Exemple 1

"AB2000039444452600D666@A2" devient "AB2@4039@4452600D@36@@A2".

Si tous les caractres sont utiliss, on en choisit un rarement utilis comme "indicateur" et on
le double quand on rencontre ce caractre rare. Ce principe est illustr dans lexemple ci-dessus.
On remarque galement que dans le cas prcis o on se met daccord pour ne remplacer que
les courses dun caractre donn, il nest pas ncessaire de fournir le caractre remplac. Ce type
dutilisation est frquent dans le cas des transmissions dimage en noir et blanc (type fax).
Exemple 2

"AB20000394000005260D000A2" est remplac par "AB2@4394@55260D@3A2".

Une condition est ncessaire pour que cette compression soit utile : la squence rpte doit
contenir au moins 4 lments pour obtenir un gain (3, dans le cas o on est daccord sur le
caractre remplac).
1.2.2.2

Utilisation dune bit-map

Il est facile de laisser tomber des champs entiers dun enregistrement. Prenons un enregistrement de 4 champs de 8 caractres (32 caractres) pour les noms alors que la longueur moyenne
est bien plus courte. On utilise alors la technique du bit-mapping.
Dumont Renaud

Support Compression et Stockage

Structure de linformation

13

Le principe est dutiliser une bit-map devant chaque enregistrement pour indiquer la prsence

Fig. 1.13 Utilisation dune bit-map


ou labsence de valeur dans les diffrents champs.
1.2.2.3

Recherche de pattern

Des tudes sur de nombreux textes anglais ont rvl que le nombre de mots distincts qui les
composent reprsente 10 15% du nombre total de mots utiliss dans ces textes. Si on ralise
la mme tude sur des textes issus de domaines spcialiss (articles scientifiques, documents
militaires ou mdicaux, ...), on saperoit que ce nombre de mots distincts reprsente un pourcentage encore plus petit. Autrement dit, les mots utiliss sont moins diversifis, ou encore, le
texte tudi est plus redondant. Ds lors, il serait intressant de remplacer des mots ou patterns pralablement choisis.
Cependant, le gain est limit par 2 observations :
les mots les plus courants sont courts (the, a, to, in, ...),
par loi de ZIPF : la frquence du nieme mot le plus courant est proportionnelle 1/n,
cest--dire que le gain augmente de plus en plus lentement quand on code de plus en plus
de mots.
Il existe tout de mme quelques pistes de solution :
on peut coder des "digrammes", cest--dire remplacer des paires de lettres par un seul
caractre. Ainsi, on pourrait remplacer les paires "ES", "TR", "LL",... par un caractre
propre. On obtient dans ce cas une compression denviron 50% en moyenne.
on peut aussi coder les "patterns" les plus courants : cette technique sutilise lorsque des
mots apparaissent frquemment (ex : vocabulaire informatique) mais
1. lanalyse pralable pour les dterminer est coteuse :
il faut tenir compte dun nombre lev de candidats, et
le choix dun pattern peut affecter lutilit des prcdents. Par exemple, si la squence ere est choisie puis galement here, there et where, si on commence
par remplacer les squences les plus longues, le codage de ere devient beaucoup
moins utile.
2. cela peut gner la recherche :
Par exemple, si ing l est cod par # et ing t par @, et si string est cod par
str# dans le contexte string lists et par str@ dans le contexte string trees. La
recherche de string conduit analyser plus dun pattern.
Dumont Renaud

Support Compression et Stockage

Structure de linformation

1.2.3

14

Les algorithmes dictionnaire (ou substitution de facteurs)

Mme si, proprement parler, il sagit dun codage par substitution, nous allons leur consacrer une section part entire. Ces algorithmes consistent remplacer des squences (les facteurs) par un code plus court qui est lindice de ce facteur dans un dictionnaire.
1.2.3.1

LZ77 (ou LZ1)

Dans cette approche, le dictionnaire nest quune portion du texte encod prcdemment.
Lencodeur examine le texte compresser par lintermdiaire dune fentre glissante (sliding
windows).

Fig. 1.14 Encodage par LZ77 [SAL04]


La figure 1.14 montre la fentre glissante, compose de deux lments :
Le Search Buffer, SB, qui contient le texte qui vient dtre compress,
Le Look-ahead Buffer, LaB, contenant le texte compresser.
Les tailles de ces buffers ne sont pas imposes, elles dpendent de limplmentation.
Chaque portion de texte encod est reprsente par un triplet <o,l,cw>, o
o est loffset : distance sparant le pointeur du SB de la LaB,
l est la longueur de la squence commune aux deux buffers,
"cw" est lidentifiant du caractre suivant la squence compresser dans le LaB.
Si on reprsente ce triplet sur lexemple prcdent, il vient :

Fig. 1.15 Encodage par LZ77 - triplet


La suite de lencodage est similaire, comme on le voit sur la figure 1.16.

Dumont Renaud

Support Compression et Stockage

Structure de linformation

15

Fig. 1.16 Suite de lencodage [SAL04]

Pour le caractre suivant s dans le LaB, lencodeur dispose de deux possibilits (puisque
2 s sont prsents dans le SB). Le principe sera de trouver la plus longue sous-chaine de correspondance. Ici, elles sont de longueur quivalente (la plus grande sous-chaine correspondante
contient uniquement s dans les deux cas). Par simplification thorique dans le cadre de cette
introduction, nous considrerons que loccurence la plus gauche sera utilise. Le triplet rsultant sera donc (10,1,"t).
En ce qui concerne le dcodage, il suffit de regarder les valeurs des donnes du triplet, et le
texte peut tre reconstruit.
Au point de vue applicatif, les logiciels GZIP, PKZIP, etc. fonctionnent sur une variante du
LZ77, portant le nom de DEFLATE2 .
1.2.3.2

LZ78 (ou LZ2)

Lalgorithme LZ77 a subi beaucoup damliorations : optimisation de la recherche dans le


SB, le codage des triplets, llimination du triplet encodant un caractre unique, ...
Linconvnient majeur de cet algorithme est la manire dont il gre les squences priodiques
plus longues que la taille du SB. Ainsi, imaginons le cas dun SB de longueur 6. Il suffit que
la squence soit plus longue dun caractre pour quaucun des lments la composant ne puisse
tre compress. Ce cas est illustr la figure pour la squence ABCDEFG.

Fig. 1.17 Problme li au LZ77


Lalgorithme LZ78 rsoud ce problme par lintermdiaire dun dictionnaire qui devra tre
construit autant pour le codeur que pour le dcodeur.
Les squences codes ont la forme dun couple <i,c>, o i est lindex de lentre dans le
dictionnaire correspondant la plus longue chane semblable ladite squence coder, et c, le
caractre suivant la squence dans le flux dentre. Si la squence na pas de correspondance dans
le dictionnaire, i est gal 0, et le couple est ajout au dictionnaire. Un exemple de dictionnaire
est donn la figure 1.18.
2 Voir

Data Compression, The complete reference, 3rd, 2004.

Dumont Renaud

Support Compression et Stockage

Structure de linformation

16

Fig. 1.18 LZ78 - construction du dictionnaire [SAL04]

1.2.3.3

LZW

La variante la plus populaire du LZ78 est lalgorithme LZW (Lempel, Ziv, Welch) cr en
1984. Le principe est de rduire lenvoi dinformations au dcodeur. Au lieu du couple <i,c>,
seul lindex <i> sera transmis.
Algorithme
On initialise la table (le dictionnaire) en y plaant les codes des caractres ASCII tendu,
On regarde le caractre transmettre :
1. sil existe dj dans la table, on regarde le caractre suivant,
2. si le groupe des deux existe galement, on regarde le suivant, etc.
Lorsquun nouveau groupe est dcouvert, on le dfinit en linsrant dans le dictionnaire.
Dans un premier temps, on transmet les codes des morceaux qui le composent. La prochaine fois quon le rencontrera, on transmettra son code propre. Les mots ajouts au
dictionnaire seront dtermins par lintermdiaire dune "fentre" voluant au fil de lanalyse du texte compresser. Ce concept est explicit dans lexemple ci-dessous.
On procde de la sorte jusqu la fin de la transmission.
Lorsque le dictionnaire est plein, soit on procde son extension, soit on se borne utiliser
les codes dj existants.
La base du dictionnaire repose sur les 256 caractres du code ASCII tendu. A la suite de
ceux-ci, on trouvera diffrents groupes de lettres rencontrs au fur et mesure de la compression
du texte.
Comment se construit le dictionnaire ?

Dumont Renaud

Support Compression et Stockage

Structure de linformation

17

Le principe est dutiliser une fentre grandissant jusqu lobtention dun mot inexistant
dans le dictionnaire. Auquel cas le mot en question est ajout, le code du prfixe connu envoy,
et la fentre ramene au dernier caractre analys.
Pour plus de clart, soit lexemple suivant, sachant que les 256 premires entres du dictionnaire sont initialises avec les 256 valeurs du code ASCII tendu :
Imaginons le message "ma maison" a compress.
1. Le premier caractre a analys est "m". Il est dans le dictionnaire.
2. Le caractre suivant est concatn avec "m" et forme la chaine "ma". Elle nest pas
dans le dictionnaire : il faut donc lajouter. On lui affecte donc lentre 256 dans le
dictionnaire (on commence 0). On envoie la valeur correspondante "m"(109).
3. Un nouveau mot venant dtre ajout, on reprend alors au dernier caractre pris en
compte (ici "a"). Le caractre suivant est concatn et forme la chaine "a ". Elle nest
pas dans le dictionnaire : il faut donc lajouter. On lui affecte donc lentre 257 dans
le dictionnaire. On envoie la valeur correspondante "a"(97).
4. Un nouveau mot venant dtre ajout, on reprend alors au dernier caractre pris en
compte (ici " "). Le caractre suivant est concatn et forme la chaine " m". Elle
nest pas dans le dictionnaire : il faut donc lajouter. On lui affecte donc lentre 258
dans le dictionnaire. On envoie la valeur correspondante " "(32).
5. Un nouveau mot venant dtre ajout, on reprend alors au dernier caractre pris en
compte (ici "m"). Le caractre suivant est concatn et forme la chaine "ma". Cette
chaine est dj dans le dictionnaire. On concatne le caractre suivant et cela forme
la chaine "mai". Elle nest pas dans le dictionnaire : il faut donc lajouter. On lui
affecte donc lentre 259 dans le dictionnaire. On envoie donc la valeur correspondante
"ma"(256).
6. Un nouveau mot venant dtre ajout, on reprend alors au dernier caractre pris en
compte (ici "i"). Le caractre suivant est concatn et forme la chaine "is". Elle nest
pas dans le dictionnaire : il faut donc lajouter. On lui affecte donc lentre 260 dans
le dictionnaire. On envoie la valeur correspondante "i"(105).
7. Un nouveau mot venant dtre ajout, on reprend alors au dernier caractre pris en
compte (ici "s"). Le caractre suivant est concatn et forme la chaine "so". Elle nest
pas dans le dictionnaire : il faut donc lajouter. On lui affecte donc lentre 261 dans
le dictionnaire. On envoie la valeur correspondante "s"(115).
8. Un nouveau mot venant dtre ajout, on reprend alors au dernier caractre pris en
compte (ici "o"). Le caractre suivant est concatn et forme la chaine "on". Elle
nest pas dans le dictionnaire : il faut donc lajouter. On lui affecte donc lentre 262
dans le dictionnaire. On envoie la valeur correspondante "o"(111).
9. Un nouveau mot venant dtre ajout, on reprend alors au dernier caractre pris
en compte (ici "n"). Le caractre suivant est concatn et forme la chaine "n(eof)".
Elle nest pas dans le dictionnaire : il faut donc lajouter. Etant donn le caractre
spcifique de fin de fichier, il nest pas ajout au dictionnaire. On envoie la valeur
correspondante "n"(110).

Dumont Renaud

Support Compression et Stockage

Structure de linformation

18

Au final, le flux compress sera (109)(97)(32)(256)(105)(115)(111)(110).


Lors de la dcompression, le dcodage se fera de manire inverse.
Cette compression est efficace pour de gros fichiers. Il nen est pas de mme pour un petit
fichier, comme on le voit ci-dessus dans lexemple : le message est trop court pour pouvoir bnficier des avantages de la compression LZW.

1.2.3.4

Application du LZW - la compression sous UNIX

Il sagit de la commande compress. Le dictionnaire a initialement une taille de 512 entres.


Ainsi, la taille des index est limite 9 bits (29 = 512). Une fois le dictionnaire plein, on double
sa taille. Les index peuvent maintenant se transmettre sur 10 bits.
La taille maximale des index, note bmax , peu tre spcifie par lutilisateur entre 9 et 16,
16 bits tant la valeur par dfaut. Une fois la taille du dictionnaire gale 2bmax , compress
poursuit la compression de manire statique (i.e., seules les squences dj prsentes dans le
dictionnaire peuvent tre utilises pour la compression).

1.2.4

La compression par antidictionnaire

Un antidictionnaire3 est un ensemble de mots qui napparaissent pas dans le texte.


Pour mieux comprendre son fonctionnement, nous allons lillustrer par un exemple :
Soit un texte (binaire) que lon souhaite compresser.
Imaginons que le mot 1001 soit dans lanti-dictionnaire.
Ds lors, on pourra coder la squence 1000 par 100.
En effet, sachant que le mot 1001 est dans lanti-dictionnaire, cest donc que ce mme
mot nest pas dans le texte coder. Donc seul un 0 peut suivre la squence 100 dans le
texte.

1.2.5

Catgorisation des compressions

Il existe plusieurs manires de classer les formats de compression. En voici quelques exemples :
Par analyse statistique ou par substitution : Huffman VS LZW
Avec ou sans perte (= destructive ou non destructive) :
Avec perte : des dtails sont dtruits lors de la compression, et il est impossible de
les retrouver par la suite. On utilise les proprits de loreille et de loeil humain pour
supprimer les informations inutiles. Exemple : Jpeg
Sans perte : aucune perte et restitution parfaite aprs dcompression. Exemples : Huffman, RLE, Zip, ...
Symtrique ou asymtrique :
Symtrique : le temps de calcul ncessaire pour la compression ou la dcompression est
quivalent. Il sagit par exemple dalgorithmes de transmission de donnes.
3 M.Crochemore,

F.Mignosi, A.Restivo, S.Salemi., Data Compression using antidictionnary, 2000.

Dumont Renaud

Support Compression et Stockage

Structure de linformation

19

Asymtrique : lune des deux phases est plus rapide que lautre, tels que les algorithmes
darchivage massif.
...

1.3

Ressources

Ressources bibliographiques :
Data compression, the complete reference, David Salomon, 2004, Springer.
Introduction to Data compression, Khalid Sayood, 2006, Morgan Kaufmann.
Illustrations :
Data Compression, the complete reference, David Salomon, 2004, Springer
Computer and Network Security, 3rd edition, W. Stallings, 2003, Prentice Hall
Wikipedia.org

Dumont Renaud

Support Compression et Stockage

You might also like