0% ont trouvé ce document utile (0 vote)
69 vues21 pages

TD N°04 Huffman

Le document traite des techniques de codage à longueur variable, en se concentrant sur le codage de Huffman et le codage arithmétique. Le codage de Huffman, inventé en 1952, utilise des codes de longueur variable basés sur les probabilités d'apparition des symboles pour compresser les données sans perte. En revanche, le codage arithmétique, introduit en 1976, offre une compression plus efficace en représentant un message par des intervalles proportionnels aux probabilités des symboles.

Transféré par

Yasmine Chihab
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
69 vues21 pages

TD N°04 Huffman

Le document traite des techniques de codage à longueur variable, en se concentrant sur le codage de Huffman et le codage arithmétique. Le codage de Huffman, inventé en 1952, utilise des codes de longueur variable basés sur les probabilités d'apparition des symboles pour compresser les données sans perte. En revanche, le codage arithmétique, introduit en 1976, offre une compression plus efficace en représentant un message par des intervalles proportionnels aux probabilités des symboles.

Transféré par

Yasmine Chihab
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Le codage à longueur

variable
Introduction
 Contexte : codage ou compression des
données numériques

 Pourquoi : réduction de la quantité d ’éléments


binaires représentant l ’information
=> codage de source
Qté d'info. ima. originale [bit]
Taux de comp. =
Qté d'info. ima. compressée [ bit]

 Finalité : archivage ou transmission


2
 Codage Huffman (1952)
Le codage de Huffman est un algorithme de compression de données
sans perte. Le codage de Huffman utilise un code à longueur variable
pour représenter un symbole de la source (par exemple un caractère
dans un fichier).

Le code est déterminé à partir d'une estimation des probabilités


d'apparition des symboles de source, un code court étant associé aux
symboles de source les plus fréquents.

Il a été inventé par David Albert Huffman, et publié en 1952

3
Codage Huffman (1952)
 Algorithme de génération d’un code optimal symbole par symbole
 Codage à longueur variable : code long pour probabilités faibles

• Algorithme
1. Extraction des probabilités
2. Création de l’arbre
3. Création de la table de Huffman
4. Codage
On transmet la table + les codes en binaires

1. Lecture de la table de Huffman


2. Création de la table de décodage
3. Lecture séquentielle et décodage
4
 Codage Huffman, Principe : (1952)

L'arbre est créé suivant un principe simple : on associe à chaque fois


les deux nœuds de plus faibles poids, pour donner un nouveau nœud
dont le poids équivaut à la somme des poids de ses fils. On réitère ce
processus jusqu'à n'en avoir plus qu'un seul nœud : la racine. On
associe ensuite par exemple le code 0 à chaque embranchement
partant vers la gauche et le code 1 vers la droite.

5
Codage Huffman : Exemple 1
supposons que tous les messages envoyés d’une source à une
destination contiennent les lettres a, b, c, d et e representées par les
probabilités .05, .2, .4, .17 et .18, respectivement.
Notre but est d’encoder chaque caractère en une sequence de 1 et 0 de
manière a ce qu’aucun code representant un caractere ne représente le
prefix d’un autre.

Example: on ne peut pas avoir les codes “110” et “1101” car “110” est
un prefix de “1101”.

6
Codage Huffman : Exemple 1
Un noeud est représenté par :

lettre
probabilite

Gauche Droite

7
Solution
1
0 1 Code
c .6
.4 a= 100
0 1 b= 111
c= 0
.22 .38 d=101
0 1 0 1 e=110
a d e b
.05 .17 .18 .2
8
Codage de Huffman : Exemple 2

9
a
1
0.40
a
b 001 0.40 racine
0.18 b 1
0.18
c 011 c 001
0.10 0.10
011 (cefbdgh)
(cef)
d 0000 d 0.60
0.23
0.10 0.10 01 0
e 0100 (bdgh)
0.07 0.37
(ef) 00
f 0101 0.1 CODE
3010
0.06 Probabilité
(dgh) du regroupement DE LA
g 0.9 BRANCHE

0.05 00010 000


(gh) Codage de Huffman
h 00011 0.09
0.04 0001
a
1
a
b 001 1
b racine
c 011 c
001 0
011
(cefbdgh)
01
d 0000 d (cef)
00(bdgh)
e 0100
010
(ef) Boucle du décodage
f 0101 début à la racine ;
000
g (dgh) progression dans
le message jusqu’à
00010 0001 une feuille :
h (gh) lettre décodée.
00011
Le code de Huffman en pratique

Apparaît pratiquement partout…


 Dans les algorithmes de compression gzip, pkzip, winzip,bzip2.
 Les images compressées jpeg, png.
 L'audio compressée mp3.
Le code de Huffman en pratique
Limites

le codage de Huffman n'est pas adapté dans le cas d'une source
dont les propriétés statistiques évoluent au cours du temps,
puisque les probabilités des symboles se modifient et le codage
devient inadapté.
 La transmission de l'arbre de codage
 Chaque code est représenté par un nombre entier de bits.
 Codage Arithmétique (1976)

Le codage arithmétique est un codage entropique utilisé en


compression de données sans perte. Il permet une meilleure
compression que le codage de Huffman, sauf lorsque tous les poids
pour les feuilles/nœuds/racines de l'arbre de Huffman sont des
puissances de 2, auquel cas les deux méthodes sont équivalentes

14
 Codage Arithmétique (1976)
Le codage arithmétique (au même titre que le Codage de Huffman) est
un code à longueur variable, c'est-à-dire qu'un symbole de taille fixe
(en bits) sera codé par un nombre variable de bits, de préférence
inférieur ou égal à sa taille originale. On ne modifie donc pas la
densité de symboles mais leur codage afin de réduire l'espace qu'ils
occupent.

Ce qui différencie le codage arithmétique des autres codages sources


est qu'il code le message par morceaux (théoriquement il peut coder un
message entier de taille quelconque mais dans la pratique on ne peut
coder que des morceaux d'une quinzaine de symboles et représente
chacun de ces morceaux par un nombre n flottant.

15
 Codage Arithmétique, Compression (1976)
La compression demande un tableau statistique qui comprend :

La totalité des s symboles que l'on rencontre dans le message à


compresser.
Les probabilités p de rencontrer le symbole s dans le message.
L'intervalle [ 0 ; 1 [ découpé en intervalles proportionnel à la
probabilité p que le symbole s apparaisse dans le message (ex: si s a
50 % de chance d'apparaître, son intervalle fera 0,5).

Le but est d'appliquer une suite d'opérations à un intervalle donné


(couramment c'est l'intervalle [ 0 ; 1 [ ) afin de modifier ses bornes à
chaque ajout d'un symbole s et de restreindre au maximum le nombre
de possibilités du nombre de sortie.

16
 Codage Arithmétique, Compression (1976)
Voici les opérations à effectuer lors de l'ajout d'un symbole s :

On enregistre la différence entre la borne supérieure (BS) et la borne


inférieure (BI). On notera cette valeur BB.
La BS prend la valeur : BS=BI + BB * (BS_du_symbole_s)
La BI prend la valeur : BI=BI + BB * (BI_du_symbole_s)

17
 Codage Arithmétique, Décompression (1976)
Pour décompresser un fichier (représenté par un nombre n), il faut
utiliser la même table qui a été utilisée pour la compression puis
effectuer les étapes suivantes jusqu'à la fin du fichier :

Observer dans l'intervalle de quel symbole s se trouve le nombre,


ajouter s au fichier décompressé et garder en mémoire la probabilité p
de s ainsi que sa BI.

n prend la valeur n = ( n − B I ) / p .

Une fois le marqueur de fin atteint, l'algorithme s'arrête et le fichier est


considéré comme décompressé.

18
 Codage Arithmétique, Exemple (1976)
On appliquera ici l’algorithme de compression arithmétique sur le
texte "WIKI". On obtient dès lors le tableau suivant :
BS=BI + BB * (BS_du_symbole_s)
BI=BI + BB * (BI_du_symbole_s)

Par convention on initialise l'algorithme avec une borne inférieure


valant 0 et une borne supérieure valant 1. Il ne reste plus qu'à appliquer
la suite d'opérations vue précédemment à chaque ajout d'un caractère.

19
 Codage Arithmétique, Exemple (1976)

Donc, tout nombre compris dans intervalle [ 0 , 1640625 ; 0 , 1796875


sera une version compressée de la chaîne de caractère "WIKI". Le
nombre 0,17 étant compris dans cet intervalle, il peut convenir pour
représenter "WIKI" compressé. À l'inverse, 0,16 ou 0,1796875 n'étant
pas dans l'intervalle, ils ne conviendront pas et entraîneront des erreurs
lors du décodage.
 Codage Arithmétique, Exemple (1976)
Décompression
Supposons que l'on reçoive le message compressé 0,17, voici comment
il serait décodé : (On utilise évidemment le même tableau que
précédemment pour connaître les intervalles de chaque lettre et leurs
probabilités d'apparition). .

n=(n−BI)/p

On retrouve donc la bonne chaîne de caractères auparavant


compressée
21

Vous aimerez peut-être aussi