Vous êtes sur la page 1sur 29

Université des Sciences et de la Technologie Houari Boumédiene

Faculté d’Electronique et d’Informatique


Département de Télécommunications

Licence Télécommunications
Sections A et B

Méthodes de compression

1. Arbre n-aire de codage


2. Méthode de Shannon-Fano
3. Méthode de Huffman
4. Méthode de Lempel-Ziv-Welch

2017-2018
Arbre n-aire de codage
Pour construire un code n-aire sans préfixe, le moyen le plus efficace est la
représentation graphique du code par un arbre n-aire. Rappelons que n est le nombre
de bits ou digits qui constituent l’alphabet du code. Un arbre bi-naire représente un
code bi-naire contenant des mots composés de 0 et 1. Un arbre ternaire représente des
mots de codes contenant 3 digits (par exemple 0,1 et 2), etc.
Définition:
Un arbre est un graphe composé des nœuds et des arcs.
Il commence par un nœud de racine.
Chaque nœud est soit une feuille (un point de terminaison), soit un nœud interne à
partir duquel d’autres nœuds fils peuvent dériver à travers des arcs.
On appelle arité d’un nœud, le nombre de ses fils.
Un nœud feuille est un nœud sans fils.

2
Arbre n-aire de codage
Construction d’un arbre de codage :
Un arbre de codage est construit selon les considérations suivantes:
La racine est placée au sommet.
La profondeur d’un nœud est le nombre d’arcs à parcourir pour aller de la racine à ce
nœud.
La profondeur de l’arbre est la profondeur maximale de ses feuilles.
Un arbre n-aire est un arbre dans le quel chaque nœud a une arité égale à n.
Un arbre n-aire complet est un arbre dans lequel toutes les feuilles ont la même
profondeur.
A un niveau de profondeur p, il y a np nœuds au maximum.
Un mot de code est représenté par une séquence d’arcs (branches) étiquetés par
des digits de façon à ce que chaque digit apparaisse une seule fois à chaque niveau.
Ainsi, le mot de code est la séquence des étiquettes le long des chemins menant de la
racine à la feuille qui représente le symbole correspondant.
3
Arbre n-aire de codage
Exemple:
On considère le code C={10, 11, 000, 101, 111, 1100, 1101} utilisé pour coder un
alphabet : {A, B, C, D, E, F, G} . Ce code n’est pas un code préfixe (c’est-à-dire sans
préfixe). On veut trouver un code préfixe à l’aide d’un arbre de codage. Le code
contient : 2 mots de 2 digits, 3 mots de 3 digits et 2 mots de 4 digits. L’alphabet du code
est binaire.
Racine
0 1 Code :
A : 01
B: 10
0 1 0 1 C: 000
D: 001
A B E:110
0 1 0 1 F:1110
G: 1111
C D E
0 1

F G
4
Méthode de Shannon-Fano
Principe de la méthode :

Cette méthode consiste à construire progressivement un arbre D-aire en partant du


sommet (racine) de l’arbre, représentés par les probabilités des symboles de la
source, en subdivisant à chaque étape les probabilités en deux sous-ensembles les
plus équitables possibles jusqu’à la base. A chaque étape, on crée soit un nœud
terminal soit un nœud intermédiaire puis les relier par des branches pour affecter un
code. Plus précisément, cette méthode se déroule selon les étapes suivantes pour un
arbre binaire (D=2) :

Etape 1: Classer les symboles selon l’ordre décroissant des probabilités (en haut) .
Etape 2: Diviser l’ensemble des symboles de la source en deux sous-ensembles
contenant chacun des symboles consécutifs de la l’alphabet et ayant des sommes
de probabilités les plus proches possible. Affecter le code « 1 » à un sous-ensemble
et le code « 0 » à l’autre sous-ensemble.

Etape 3: Répéter l’étape 2 jusqu’à l’obtention de deux sous-ensembles contenant


un seul symbole chacun.
Etape 4: Arranger les digits binaires associés aux sous-ensembles de gauche à
droite pour former les codewords (mots de code). 5
Méthode de Shannon-Fano
 Placer les probabilités des symboles de la source à la racine (sommet) du graphe
classées par ordre décroissant (du maximum au minimum). L’ensemble des
probabilités constitue le nœud racine (Niveau 0).
A B C D E F G
Niveau 0 : 0.400.150.150.100.100.050.05

6
Méthode de Shannon-Fano
 Subdiviser l’ensemble des probabilités en deux sous-ensembles en traçant un trait
vertical de telle sorte que la somme des probabilités des deux sous-ensembles soient
les plus proches possibles et les placer au niveau suivant.
A B C D E F G
Niveau 0 : 0.400.150.150.100.100.050.05

Niveau 1 : 0.400.150.150.100.100.050.05

7
Méthode de Shannon-Fano
 Dessiner un nœud terminal (feuille) dans le cas des sous-ensembles composés d’une
seule probabilité et un nœud intermédiaire au niveau du point de subdivision.

A B C D E F G
Niveau 0 : 0.400.150.150.100.100.050.05

Niveau 1 : 0.400.150.150.100.100.050.05

8
Méthode de Shannon-Fano
 Tracer les branches pour relier les nœuds entre deux niveaux.

A B C D E F G
Niveau 0 : 0.400.150.150.100.100.050.05

Niveau 1 : 0.400.150.150.100.100.050.05

9
Méthode de Shannon-Fano
 Répéter la subdivision jusqu’à la base de l’arbre en créant à chaque fois des nœuds
et des branches.

A B C D E F G
Niveau 0 : 0.400.150.150.100.100.050.05

Niveau 1 : 0.400.150.150.100.100.050.05

Niveau 2 : 0.400.150.150.100.100.050.05

10
Méthode de Shannon-Fano
 Répéter la subdivision jusqu’à la base de l’arbre en créant à chaque fois des nœuds
et des branches.

A B C D E F G
Niveau 0 : 0.400.150.150.100.100.050.05

Niveau 1 : 0.40015 0.150.100.100.050.05

Niveau 2 : 0.400.150.150.100.100.050.05

Niveau 3 :
0.150.100.100.050.05

Niveau 4 :

11
Méthode de Shannon-Fano
 Répéter la subdivision jusqu’à la base de l’arbre en créant à chaque fois des nœuds
et des branches.

A B C D E F G
Niveau 0 : 0.400.150.150.100.100.050.05

Niveau 1 : 0.40015 0.150.100.100.050.05

Niveau 2 : 0.400.150.150.100.100.050.05

Niveau 3 :
0.150.100.100.050.05

Niveau 4 : 0.050.05

12
Méthode de Shannon-Fano
 Affecter à chaque branche un « 0 » et « 1 »

A B C D E F G
Niveau 0 : 0.400.150.150.100.100.050.05
0 1

Niveau 1 : 0.400.150.150.100.100.050.05
0 1 0 1

Niveau 2 : 0.400.150.150.100.100.050.05

0 1 0 1
Niveau 3 : 0.150.100.100.050.05
0 1

Niveau 4 : 0.050.05

13
Méthode de Shannon-Fano
 Former le mot code pour chaque symbole de la source en concaténant les « 0 » et «
1 » de la gauche vers la droite par la lecture des codes du nœud racine vers le nœud
terminal.
A B C D E F G
Niveau 0 : 0.400.150.150.100.100.050.05
0 1

Niveau 1 : 0.400.150.150.100.100.050.05
0 1 0 1

Niveau 2 : 0.400.200.150.100.100.050.05

0 1 0 1
Niveau 3 : 0.150.100.100.050.05
0 1

Niveau 4 : 0.05 0.05

Code : 00 01 100 101 110 1110 1111


14
Méthode de Shannon-Fano
Conclusion:

 L’algorithme de Shannon-Fano ne donne pas toujours un code optimal.


 Le nombre moyen de bits nécessaires pour le codage :

Lmoy= 2×(0.4+0.15)+3×(0.15+0.1+0.1)+4×(0.05+0.05) = 2.55 bits.

 Comparativement au codage binaire à longueur fixe qui nécessite 3 bits, le codage


Shannon-Fano permet un taux de compression de (3-2.55)/3=15%.

15
Méthode de Huffman
Principe de la méthode :
Elle a été inventée par Huffman en 1952 pour construire un code instantané et donc sans
préfixe. Le codage de Huffman est utilisé pour la compression sans pertes notamment
JPEG pour les images, MPEG pour la vidéo et MP3 pour l’audio.
Cette consiste à construire progressivement un arbre D-aire en partant de la base jusqu’au
sommet (racine) de l’arbre, représentés par les probabilités des symboles de la source, en
regroupant à chaque étape deux probabilités les plus faibles. Plus précisément, cette
méthode se déroule selon les étapes suivantes pour un arbre binaire (D=2) :
Etape 1: Classer les symboles selon l’ordre croissant des probabilités de gauche à droite
(en bas).
Etape 2: Les deux symboles ayant les plus petites probabilités sont combinés à l’aide de
deux branches pour construire un nœud qui sera représenté par la somme des deux
probabilités. Affecter un code « 0 » pour une branche et un code « 1 » pour l’autre
branche. Supprimer les deux symboles de la liste.
Etape 3: Répéter l’étape 2 jusqu’à l’obtention d’un nœud avec une probabilité égale à 1.
Ce nœud constitue la racine de l’arbre de codage.
Etape 4: Les codes des chemins qui mènent aux différents symboles depuis la racine
constituent les mots de code respectifs.

16
Méthode de Huffman
 Répéter la sélection jusqu’à arriver au sommet de l’arbre pour trouver la probabilité
de valeur maximale 1.0 en créant à chaque étape des nœuds et des branches.

1
0 1

Niveau 4 : 0.60
0 1

Niveau 3 : 0.35
0 1

Niveau 2 : 0.20
0 1
Niveau 1 : 0.10 0.25
0 1 0 1

Niveau 0 : 0.050.050.100.150.100.150.40
G F E C D B A

Codes: A(1), B(011), C(001), D(010), E(0001), F(00001), G(00000). 17


Méthode de Huffman
A noter:
 Le nombre moyen de bits nécessaires pour le codage :

Lmoy= 5×(0.05+0.05)+4×(0.1)+3×(0.1+0.15+0.15)+0.4 = 2.5 bits.

Comparaison :
Entropie de la source: H (S)= 2.446bits, Hmax=log7=2.8073 bits
Efficacité : E= H(S)/Lmoy
Taux de redondance de la source codée (après codage) noté rc:

Binaire Shannon-Fano Huffman

Longueur moyenne (bits/ symbole) 3 2.55 2.5

Taux de redondance après codage (%) 18.47 4.08 2.16

Efficacité du code (%) 81.53 95.92 97.14


18
Méthode de Huffman

Conclusion :

Pour des mots de codes à longueur fixe, la méthode de Huffman offre le code le plus
efficace parmi les codes à déchiffrement unique.
 Le codage de Huffman satisfait toujours les conditions du théorème de codage
source.
 L’application des algorithmes de Shannon et de Huffman nécessite la connaissance
préalable des probabilités de distribution des symboles. En pratique, ces probabilités
sont estimées par la fréquence d’apparition des mots dans le message. Ces
probabilités doivent être transmises au récepteur avec le code pour permettre un
décodage correct.

19
Méthode de Lempel-Ziv-Welch :
Principe du codage :
Il consiste à utiliser une table de codage appelée Dictionnaire contenant des chaînes de
caractères avec leur position appelé Index pour compresser un message.

Au départ, le dictionnaire est initialisé avec des chaînes composées d’un seul caractère
(Exemple code ASCII sur 8 bits) en affectant un numéro d’index pour chaque chaîne en
commençant par 0.
Puis, le dictionnaire est mis à jour progressivement au fur et à mesure de l’apparition d’une
nouvelle chaîne.
Pour cela, l’algorithme utilise un pointeur pour balayer le message à compresser de la gauche
vers la droite. Ce pointeur permet d’identifier le code de la chaîne se trouvant dans le
dictionnaire pour coder le message. Le premier caractère correspond à la première chaine
d’initialisation « P ».
On lit le caractère suivant dans le message « c ». Si la juxtaposition P⊕c n’est pas dans le
dictionnaire on l’ajoute comme nouvelle chaine, on envoie la position de P et on utilise c pour
initialiser la chaine suivante.

Exemple :

Alphabet composé de 7 symboles : AX ={, a, e, g, i, m, r} ( : Espace blanc)

Message du texte à coder : M= amiamiraimeimage

20
Méthode deIndexLempel-Ziv-Welch
Chaine
:
Initialisation Caractère lu Position émise
0 
1 a
2 e
3 g
4 i
5 m
6 r
7 am a m 1
8 mi m i 5
9 i i  4
10 a  a 0
a m
11 ami am i 7
12 ir i r 4
13 r r  6
 a
14 ai a i 10
15 im i m 4
16 me m e 5
17 e e  2
18 i  i 0
i m
21
Méthode de Lempel-Ziv-Welch

19 ima im a 15
20 ag a g 1
21 ge g e 3
e 2

Code envoyé:

1 , 5, 4, 0, 7, 4, 6, 10, 4, 5, 2, 0, 15, 1, 3, 2

22
Méthode de Lempel-Ziv-Welch :
Décompression par LZW :
Pour effectuer la décompression du message codé, le récepteur utilise le dictionnaire
de départ et procède par une reconstruction du dictionnaire du message. Le
décodage se fait comme suit:

 Lire le premier caractère et l’envoyer en sortie. Ce caractère est utilisé comme


chaine d’initialisation « P » pour l’étape suivante.
 Lire le symbole suivant « c » (qui représente l’entrée dans le tableau de décodage). Si
la juxtaposition « P⊕c » n’existe pas dans le dictionnaire faire:

Ajouter au dictionnaire la sous-chaine le plus courte de « P⊕c » et qui n’existe


pas préalablement dans le dictionnaire.
Envoyer le symbole « c » à la sortie.
Utiliser « c » comme chaine d’initalisation pour l’étape suivante.

23
Méthode de Lempel-Ziv-Welch
Décompression du message reçu: 1 , 5, 4, 0, 7, 4, 6, 10, 4, 5, 2, 0, 15, 1, 3, 2
Symbole Chaine Entrée Chaine+entrée Index Sortie

0 
1 a
2 e
3 g
4 i
5 m
6 r

1 a a
5 a m am 7 m
4 m i mi 8 i
0 i  i 9 
7  am a 10 am
4 am i ami 11 i
6 i r ir 12 r
10 r a r 13 a
4 a i ai 14 i
5 i m im 15 m
2 m e me 16 e
0 e  e 16 
24
Méthode de Lempel-Ziv-Welch
Symbole Chaine Entrée Chaine+entrée Index Sortie

15  im i 17 im
1 im a ima 18 a
3 a g ag 19 g
2 g e ge 20 e

Message décodé:

amiamiraimeimage

25
Méthode de Lempel-Ziv-Welch
Exemple 2:
Coder le message suivant en utilisant le code ASCII à 8 bits comme dictionnaire initial:

TOBEORNOTTOBEORTOBEORNOT
Index Chaine Initialisation Caractère lu Position émise
256 TO T O 84
257 OB O B 79
258 BE B E 66
259 EO E O 69
260 OR O R 79
261 RN R N 82
262 NO N O 78
263 OT O T 79
264 TT T T 84
T O
265 TOB TO B 256
B E
266 BEO BE O 258
O R
267 ORT OR T 260
T O
TO B
26
Méthode de Lempel-Ziv-Welch
Exemple 2:

Index Chaine Initialisation Caractère lu Position émise


268 TOBE TOB E 265
E O
269 EOR EO R 259
R N
270 RNO RN O 261
O T
OT 263

Code:

< 84> < 79> < 66> < 69> < 79> < 82> < 78> < 79> <84 > < 256>
< 258> <260 > < 265> < 259> < 261> <263 >
Taux de compression T=1- (taille sortie)/(taille initiale)= 33.33%

27
Méthode de Lempel-Ziv-Welch
Décompression :
Symbole Chaine Entrée Chaine+entrée Index Sortie

84 T T
79 T O TO 256 O
66 O B OB 257 B
69 B E BE 258 E
79 E O EO 259 O
82 O R OR 260 R
78 R N RN 261 N
79 N O NO 262 O
84 O T OT 263 T
256 T TO TT 264 TO
258 TO BE TOB 265 BE
260 BE OR BEO 266 OR
265 OR TOB ORT 267 TOB
259 TOB EO TOBE 268 EO
261 EO RN EOR 269 RN
263 RN OT RNO 270 OT

28
Méthode de Lempel-Ziv-Welch
Remarques :
Plus le message est long, mieux est l’efficacité de l’algorithme LZW.
Les positions du code peuvent être codées avec une longueur fixe ou variable des
mots de code. On commence toujours par 9 bits (car 8 bits sont utilisés pour
l’initialisation du code ASCII) jusqu’à ce qu’on ajoute 256 chaines. Ensuite, on passe
à un codage de 10 bits.
Comparaison des méthodes de codage:
Le taux de compression évalué sur des fichiers de 6MB de type texte, binaire et
graphique a donné les résultats ci-dessous:

Code Graphique Binaire Texte Moyenne


Huffman 27.22% 24.79% 40.38% 31.04%
LZW(12 bits fixe) 20.61% 15.07% 50.32% 29.20%
LZW(12 bits 46.78% 36.61% 54.82% 45.81%
variable)

29