Professional Documents
Culture Documents
Licence Télécommunications
Sections A et B
Méthodes de compression
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 :
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.
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 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 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
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
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:
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 :
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:
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é:
amiamiraimeimage
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:
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:
29