Vous êtes sur la page 1sur 4

CODAGE LZW

Introduction. Cette partie va présenter une compression sans perte appelé codage de
Lempel Ziv Welch (LZW). Elle va d'abord décrire le codage avant de présenter la
compression et la décompression effectuées par ce codage

Description
Le codage de Lempel Ziv Welch est une adaptation du codage LZ78 d’Abraham Lempel et
Jacob Ziv amélioré par Terry Welch. Les codages Lempel Ziv ont inventé et posé les bases
du codage par dictonnaire et le codage LZW en est donc un lui aussi.

Un codage par dictionnaire (ou codage par facteur) est un codage basé sur un dictionnaire
ou une liste de mot. Ici, l’objectif va être de remplacer un mot par sa position dans le
dictionnaire.

Le codage LZW est utilisé dans les format GIF, TIFF et MOD.

Avant de commencer à présenter la compression et la décompression du codage LZW, il


faut connaitre deux règles concernant le dictionnaire utilisé. Tout d'abord, celui-ci est
créé et maintenu de façon à ce que pour un mot donné du dictionnaire, tous ses préfixes
soient aussi présents.

Compression
Le principe de la compression est le suivant :

 On lit une lettre du mot à coder qu’on ajoute au mot surveillé actuel (à l’origine :
le mot vide):
o Si le mot est présent dans le dictionnaire, on recommence l’opération en
lisant la lettre suivante
o Si le mot n’est pas présent dans le dictionnaire, on l’ajoute au dictionnaire
et on code le mot privé de la dernière lettre lue avec sa position dans le
dictionnaire. On recommence la lecture avec cette dernière lettre lue (et
donc la première lettre non codée).
 Pour présenter la compression, nous allons utiliser un exemple et nous décrirons
chaque étape de compression.

Exemple 1 : soit à coder la séquence "TWEET-TWEET" par le codage LZW sachant


qu’on va utiliser le dictionnaire de base suivant :

Lettre E T W -

Indice 0 1 2 3
Comme il est montré notre dictionnaire contient des lettres qui portent des indices de 1 à 5, si on
rencontre un caractère qui ne se trouve pas dans le tableau (dictionnaire) on le rajoute.

Mot lu Code écrit Mot ajouté au dictionnaire (+ emplacement)


T existe
TW 1 TW,4
W existe
WE 2 WE,5
E existe
EE 0 EE,6
E existe
ET 0 ET,7
T existe
T- 1 T-,8
- existe
-T 3 -T,9
T existe

TW existe
TWE 4 TWE,10
E existe
EE existe
EET 6 EET,11
T 1

Donc le code LZW de la séquence est : 120013461

Exemple2 : soit à coder la séquence "barbapapa" à l’aide du codage LZW, sachant que le
dictionnaire de base est celui du code ASCCI

Avant de commencer, on va présenter quelques lettres du code ASCII qui s’étend de (0 à


255) (voir fichier attaché), C’est-à-dire notre dictionnaire de base contient des lettres
indexées de 0 à 255.
Le tableau suivant montre les étapes du calcul:

Mot lu Code écrit Mot ajouté au dictionnaire (+ emplacement)


b
ba 98 ba, 257
a
ar 97 ar, 258
r
rb 114 rb, 259
b
ba
bap 257 bap, 260
p
pa 112 pa, 261
a
ap 97 ap, 262
p
pa 261

Dès lors, le mot "barbapapa" est codé par "98 97 114 257 112 97 261"

Décompression
De la même manière, nous allons présenter la décompression par l’exemple en
décompressant notre format compressé.

Prenons le code "98 97 114 257 112 97 261" qui représente le mot "barbapapa". Le principe
de la décompression suit l'enchainement inverse. La difficulté est de rajouter les mots non
rencontrés au dictionnaire.

Le principe du décodage est le suivant:

 On lit le prochain code du fichier compressé: celui-ci correspond obligatoirement à


un mot du dictionnaire qu'on insère donc dans le mot décodé.
 Sauf s'il s'agit du premier code, il faut ajouter au dictionnaire le mot correspondant
au mot précédent auquel a été ajouté la première lettre du mot actuel.

Le tableau suivant montre les différentes étapes de la décompression :

Code Mot Mot Mot ajouté au dictionnaire (+


lu lu décodé emplacement)
98 b b
97 a ba ba, 257
114 r bar ar, 258
257 ba barba rb, 259
112 p barbap bap, 260
97 a barbapa pa, 261
261 pa barbapapa ap, 262

Ainsi, nous avons récupéré notre premier mot: barbapapa

Vous aimerez peut-être aussi