Professional Documents
Culture Documents
i=1
l(f(si))P(si)
Exemple
S = {a, b, c, d}, P = (1/2; 1/4; 1/8; 1/8). Si C = {f(a) = 00, f(b) =
01, f(c) = 10, f(d) = 11}, la longueur moyenne du schma est 2.
1.2.2 Lentropie comme mesure de la quantit dinformation
Nous arrivons aux notions fondamentales de la thoeir de linformation. Soit une
source S = (S, P). Nous ne connaissons de cette source quune distribution de
probabilit, et nous cherchons mesurer quantitativement quel point nous igno-
rons le comportement de S.
Il est ainsi naturel de choisir lentropie pour esure, savoir, pour une source (S, P),
P = (p1, . . . , pn)
H(S) =
n
i=1
pi log
2
(
1
pi
)
Cest une mesure de lincertitude lie une loi de porbabilits, ce qui est tou-
jours illustr par lexemple du d : on considre une variable alatoire (source)
issue du jet dun d n faces. Il ya plus dincertitude dasn le rsultat de ce jet
si le d est normal que si le d est biais. Ce qui se traduit par : pour tous les
p1, . . . , pn, H(p1, . . . , pn) H(1/N, . . . , 1/n) = log
2
n.
2
1.2.3 Thorme de Shannon
Ce thorme fondamental de la thorie de linformation est connu sous le nom de
thorme de Shannon ou thorme du codage sans bruit.
Nous commenons par noncer le thorme dans le cas dune source sans mmoire.
Thorme 1.2.1 Soit une source S sans mmoire dentropie H. Tout code uni-
quement dchiffrable de S
k
sur un alphabet de taille q, de longueur moyenne l,
vrie :
l
H
log
2
q
De plus, il existe un code uniquement dchiffrable de S
k
sur un alphabet de taille
q, de longueur moyenne lk, qui vrie :
l <
H
log
2
q
+ 1
On en dduit pour la k
ieme
extnesion de S.
Thorme 1.2.2 Soit une source S sans mmoire dentropie H. Tout code uni-
quement dchiffrables de S
k
sur un alphabet de taille q, de longueur moyenne lk,
vrie :
lk
k
H
log
2
q
De plus, il existe un code uniquement dchiffrable de S
k
sur un alphabet de taille
q, de longueur moyenne lk, qui vrie :
lk
k
<
H
log
2
q
+
1
k
Preuve
Sachant que H(S
k
) = k H(S).
Pour une source stationnaire quelconque, le thorme peut snoncer :
Thorme 1.2.3 Pour toute source stationnaire dentropie H, il existe un procd
de codage uniquement dchiffrable sur un alphabet de taille q, et de longueur
moyenne l, aussi proch que lin veut de sa borne infrieure H/ log
2
(q).
3
COMPRESSION DE DONNES
En thorie, il est donc possible de trouver un code sapprochant indnement de
lentropie. En pratique pourtant, si le procd de codage consiste coder des mots
dun extension de la source, on est limit videmment par le nombre de ces mots
(|S
k
| = |S|
k
), ce qui peut reprsenter un trs grand nombre de mots).
1.3 Prliminaires
1.3.1 Dcoder sans ambigut
La premire des qualit que doit avoir un code est de pouvoir tre dcod. Cest
une vidence, mais par forcment un problme triviale. Supposons que le code
est une fonction bijective, qui transforme le message compos par lmetteur en
message qui est transmis par le canal. Pour un message source a1 . . . an, chane
surn un alphabet source quelconque, et pour un alphabet de code V , appelons f la
fonction de codage. On a laors le message cod c1 . . . cn = f(a1) . . . f(an), avec
ci V
+
, i. Le code, en tant quensemble des mots de codes, est alors limage
de la fonction de codage f. Le fait que f soit bijective ne suft cependant pas
pour que le message puisse tre dcod sans ambigut par le rcepteur. Prenons
lexemple du codage des lettres de lalphabet S = {A, . . . , Z} par les entiers C =
{0, . . . , 25} crits en base 10.
f(A) = 0, f(B) = 1, . . . , f(J) = 9, f(K) = 10, f(L) = 11, . . . , f(Z) = 25
Le mot de code 1209 peut alors correspondre diffrents messages : par exemple,
BUJ ou MAJ ou BCAJ.
Il est donc fondamental dajouter des contraintes sur le code pour quun message
quelconque puisse tre dchiffr sans ambigut. Un code C sur un alphabet V est
dit non ambigu (on dit parfois uniquement dchiffrable ), si x = x1 . . . xn V
+
,
il existe au plus une squence c = c1 . . . cm C
+
telle que
c1 . . . cm = x1 . . . xn
Thorme 1.3.1 Un code C sur un alphabet V est non ambigu si et seulement si
pour toutes squences c = c1 . . . cn et d = d1 . . . dm de C
+
.
c = d (n = m et ci = di, i = 1 . . . n
Exemple : Sur lalphabet V = {0, 1}
le code C = {0, 01, 001} nest pas uniquement dchiffrable.
4
le code C = {01, 10} est uniquement dchiffrable.
le code C = {0, 10, 110} est uniquement dchiffrable.
La contrainte de dchiffrabilit implique une longueur minimale aux mots de code
.Le thorme de Kraft donne une condition ncessaire et sufsante sur la ongueur
des mots de code pour assurer lexsitence dun code uniquement dchiffrable.
1.3.2 Prxe et proprits
Dnition 1.3.1 On dit quun code code C sur un alphabet V a la proprit du
prxe (on dit aussi instantan, ou irrductible) si et seulement si pour tout couple
de mots distincts (c1, c2), c2 nest pas un prxe de c1.
Exemple : a = 1011000, b = 01 et c = 1010, b nest pas un prxe de a mais c
est un prxe de a.
En utilisant la prorit du prxe, nous pouvons dchiffrer les mots dun tel code
ds la n de la rception du mot (instantanit), ce qui nest toujours possible pour
des codes uniquement dchiffrables : par exemple, si V = 0, 01, 11 et si on reoit
le message m = 0011111111 . . . il faut attendre loccurrence suivante dun 0 pour
pouvoir dchiffrer le second mot 0 ou 01 ?).
Thorme 1.3.2 Tout code possdant la proprit du prxe est uniquement d-
chiffrable.
Preuve
Soit un code C sur V qui nest pas uniquement dchiffrable. Alors il existe une
chane a V
n
telle que a = c1 . . . cl = d1 . . . dk, les ci et di tant des mots de C
et ci = di pour au moins un i. Choississons le plus petit i tel que ci = di (our tout
j < i, cj = dj). Alors l(ci) = l(di), sinon vu le choix de i, on aurait ci = di, ce
qui est en contradiction avec la dnition de i. Si l(ci) < l(di), ci est un prxe
de di et dasn le cas contriare di est un prxe de ci. C n donc pas la proprit du
prxe.
La rciproque est fausse : le code C = {0, 01} est uniquement dchiffrabe, mais
en possde pas la proprit du prxe. Le thorme suivant est vident, mais assure
la la dchiffrabilit dune catgorie de code trs usit.
Thorme 1.3.3 Tout code dont les mots sont de mme longueur possde la pro-
prit du prxe.
Larbre de huffmn est un objet permettant de reprsenter facilement tous les codes
5
COMPRESSION DE DONNES
qui ont la proprit du prxe, et cette reprsentation facilite grandement leur ma-
nipulation.
Dnition 1.3.2 On appelle arbre de Huffman un arbre binaire (il peut tre faci-
lement tendu un arbre q-naire) tel que tout sous-arbre a soit 0 soit 2 ls (il est
localement complet). Dans ce dernier cas, on assigne le symbole 1 larte reliant
la racine locale au ls gauche et 0 au ls droit. A chaque feuille dun arbre de Huff-
man, on peut associer un mot de {0, 1}
+
, cest la hane des symboles marquant les
artes dun chemin depuis la racine jusqu la feuille. Le maximum sur lensemble
des longueurs des mots dun arbre de Huffman est appel hauteur de cet arbre.
On appelle code de Huffman lensemble des mots correspondant aux chemins dun
arbre de Huffman ; la hauteur de cet arbre est appele aussi hauteur du code C.
Lintroduction des arbres de Huffman est justie par les deux thormes suivants,
qui assurent que tous les codes instantans pourront tre manipuls avec de tels
arbres.
Thorme 1.3.4 Un code de Huffman possde la proprit du prxe.
Preuve Si un mot de code c1 est un prxe de c2, alors le chemin reprsentant c1
dans larbre de Huffman est inclus dasn le chemin reprsentant c2. Comme c1 et
c2 sont, par dnition associs des feuilles de larbre c1 = c2. Il nexiste donc
pas deux mots diffrents dont lun est le prxe de lautre, et le code de Huffman
admet le proprit du prxe.
Thorme 1.3.5 Tout code qui possde la proprit du prxe est contenu dans un
code de Huffman.
Preuve Soit un arbre de Huffman complet (toutes les feuilles sont distance
constante de la racine) de hauteur l, la longueur du plus long mot de C. Chaque mot
ci de C est associ un chemin depuis la racine jusqu un noeud. On peut laguer
le sous-arbre dont ce nieud est racine (tous les mots pouvant tre reprsents dans
les noeuds de ce sous-arbre ont ci pour prxe). Tous les mots de C sont toujours
dans les noeuds de larbre rsultant. On peut effectuer la mme opration pour tous
les mots. On a nalement un arbre de Huffman contenant tous les mots de C.
Lemme 1.3.1 Un code est prxe si et seulement si les feuilles de son arbre
1
sont
exactement ses mots de code.
1
Les codes peuvent tres reprsents par des arbres tel que :
chaque branche a pour attribut un des symboles binaires 0 ou 1,
deux branches partant du mme noeud ont des attributs diffrents,
6
Preuve Dire quun mot de code est une feuille est quivalent dire quil nest pas
le prxe dun autre mot de code
1.3.3 Thormes de Kraft et McMillan
Il existe des conditions ncessaires et sufsantes pour lexistence de codes pr-
xes et dchiffrables. Pour les codes prxes, il sagit dune proprit classique
des arbres (ingalit de Kraft). Le rsultat reste vrai pour un code dchiffrable
(Thorme de McMillan).
Thorme 1.3.6 Soit un abre binaire dont les K feuilles ont pour ordre
n1, . . . , nK (lordre dun noeud oiu dune feuille correpsond au nombre de
branches le sparant de la racine). Alors,
K
k=1
2
nk
1
Preuve
Nous dnissons le poids de chaque noeud de larbre de la faon suivante :
le poids dune feuille dordre i est gale 2
i
,
le poids dun noeud qui nest pas une feuille est la somme des poids de ses ls.
1. Le poids dun noeud dordre i est infrieur ou gal 2
i
. Sinon, lun de ses
ls (dordre i + 1) aurait un poids > 2
(i+1)
, et par rcurrence, il existerait
au moins une feuille de poids > 2
h
, o h est lordre de cette feuille. Ceci
serait contradictoire avec la dnition d poids.
2. le poids de la racine de larbre est gale la somme des poids de ses feuilles.
La racine de larbre est un noeud dordre 0 et a donc un poids 1, ce qui nous
donne ligalit. recherche.
Lemme 1.3.2 Soit un arbre binaire dont les K feuilles ont pour ordre n1, . . . , nK
avec m = max(n1, . . . , nK). Alors
(1
K
k=1
2
nk
> 0) (1
K
k=1
2
nk
2
m
)
chaque noeuda pour attribut la concatenation des attributs des branches reliant la racine ce
noeud.
7
COMPRESSION DE DONNES
Preuve En reprenant les notations de lnonc
(1
K
k=1
2
nk
> 0) (2
m
k=1
2
mnk
> 0)
Puisque k, m nk, le terme de gauche de lingalit de droite est entier, donc
(1
K
k=1
2
nk
> 0) (2
m
k=1
2
mnk
1) (1
K
k=1
2
nk
2
m
).
k=1
2
nk
1
est satisfaite
Preuve
1. Soit un code prxe de K mots de longueur n1, . . . nK , les mots de ce code
sont exactement les feuilles de son arbre. Dautre part, la longueur dun mot
est exactement gale lordre du noeud le reprsentant dans larbre. Donc
en utilisant le Lemme 1.3.1, nous obtenons bein lingalit.
2. Soient des entiers 1 n1 . . . nK1 nK vriant lingalit , montrons
par rcurrence sur K quil existe un arbre binaire dont les K feuilles ont
pour ordre n1, . . . , nK.
(a) Si K = 1, larbre dgnr donn la gure 1.1 de profondeur n1
convient
0 1 n1 1 n1
. . .
FIG. 1.1 Arbre dgnr
8
(b) En enlevant la dernire longueur nK, nous avons
K1
k=1
2
nk
< 1
donc daprs le Lemme 1.3.2,
K1
k=1
2
nk
+ 2
nK1
=
K2
k=1
2
nk
+ 2
1nK1
1
On en dduit par hypothse de rcurrence, quil existe un arbre dont les
feuilles ont pour profondeurs n1, . . . , nK2, nK1 1. Nous dotons la
feuille profondeur nK1 1 de deux ls pour obtenir un arbre K
de profondeur n1, . . . , nK2, nK1, nK. Si nK > nK1, il suft de
rallonger lun des ls. Daprs le Lemme 1.3.1
nK1
nK1 1
nK
. . .
FIG. 1.2 Compltion de larbre
k=1
2
nk
1
est satisfaite.
Preuve
1. Si lingalit est satiasfaite alors il existe un code prxe donc un code d-
chiffrable avec les bonnes longueurs.
9
COMPRESSION DE DONNES
2. Rciproquement, soit V avec |V | = K, soit un code dchiffrable de
V et soit son codage associ. Pour tout L-uplet (x1, . . . , xn) V
L
,
nous avons (x1, . . . , xn) = (x1)|| . . . ||(xL) et donc |(x1, . . . , xn)| =
|(x1)| || . . . || |(xL)|. Donc
(
x
2
|(x)|
)
L
=
x1
. . .
xL
2
|(x1)|
. . . 2
|(xL)|
=
(x1,...,xL)
2
|(x1,...,xn)|
=
mL
i=1
aL(i)2
i
o m = maxxV l(x) et aL(i) est le nombre de L-uplets de V
L
dont le
codage est de longueur i exactement. Le code est dchiffrable, donc pour
tout i, nous avons aL(i) 2 (sinon il existerait au moins deux L-uplets
ayant la mme iamge par . Nous en dduisons que pour tout L
x
2
|(x)|
(mL)
1/L
Do lingalit recherche quand L tend vers linni.
IL est important de noter que les Thormes 1.3.7 et 1.3.8 ne sont pas constructifs.
Ils nous donnent un rsultat sur lexsitence de codes dont les longueurs des mots de
codes vrent lingalit, mais ne prtendent pas que tout code dont les longueurs
vrient lingalit est prxe (ou dchiffrable).
Corollaire 1.3.1 Sil existe un code uniquement dchiffrable, dont les mots sont de
longueur l1, . . . , ln, alors il existe un code instantan de mmes longueurs de mots.
Cest une consquence des thormes de Kraft et McMillan. Les codes dchiffrable
qui ne possdent pas la proprit du prxe ne produisent pas de code aux mots
plus courts que le scodes instantans, auxquels on peut donc se restreindre pour la
compression dinformation (leurs proprits les rendent plus maniables).
Dnition 1.3.3 Un code est dit complet sil vrie la relation
x
2
|(x)|
= 1
10
Exemple
Code A Code B code C
s1 00 0 0
s2 01 100 10
s3 10 110 110
s4 11 111 11
4
i=1
2
ni
1 7/8 9/8
Les codes A et B sont dhiffrables, le premier tant complet. Le code C nest pas
dchiffrable.
1.4 Codage statique
Les codages statisitques utilisent la frquence de chaque caractre de la source
pour la compression, et en codant les caractres le splus frquents par des mots
plus courts, se positionneent proches de lentropie.
1.4.1 Algorithme de Huffman
1.4.1.1 Lalgorithme de Huffman est optimal
Cette mthode permet de trouver le meilleur schma dencodage dune source sans
mmoire S = (S, P). Lalphabet de codage est V , de taille q. Il est ncessaire
loptimalit du rsultat de vrier que q 1||S| 1 (an dobtenir un arbre
localement complet). Dans le cas contraire, il est facile de rajouter des symboles
S, de probabilits doccurrence nulle, jusqu ce que q 1||S| 1. Les mots de
codes associs (les plus longs) ne seront pas utiliss.
Algorithme 1.1 Description de lalgorithe de Huffman
On construit avec lalphabet source S un ensemble de noued isol auxquel on
associe les probabilits de P. Soient pi1
, . . . , piq
les q symboles de plus faibles
probabilits. On construit un arbre dont la racine est un nouveau noeud et auquel
on associe la probabilit pi1
+. . . +piq
, et dont les branches sont incidentes aux
noeuds pi1
, . . . , piq
.
On recommence ensuite ave les q plus petites valeurs parmi les noeuds du plus
haut niveau (les racines), jusqu nobtenir quun arbre ( chaque itration, il y a
q 1 lments en moins parmi les noeuds de plus haut niveau), dont les mots de
S sont ls feuilles, et dont les mots de code associs dans le schma ainsi construit
sont les mots correspondant aux chemins de la racine aux feilles.
Les tapes successives de lalgorithme sotn dcrites par la gure 1.3
11
COMPRESSION DE DONNES
Tri dans lordre croissant
Construction de larbre et tri du niveau le plus haut
0, 05
0, 05
0, 05
0, 05
0, 05
0, 06
0, 06
0, 06
0, 06
0, 06
0, 10
0, 10
0, 10
0, 19
0, 19
0, 19
0, 25
0, 25
0, 25
0, 25
0, 25
0, 35
0, 35
0, 35
0, 35
0, 35
0, 11
0, 11
0, 11
0, 11
0, 21
0, 21
0, 21
0, 40
0, 40
0, 60
tape suivante
tape suivante
Arbre nal
a
a
a
a
a
b
b
b
b
b
c
c
c
c
c
d
d
d
d
d
e
e
e
e
e
f
f
f
f
f
0
0
0
0
0
1
1
1
1
1
FIG. 1.3 Exemple de cosntruction dun code de Huffman
12
Symbole Probabilit
a 0, 35
b 0, 1
c 0, 19
d 0, 25
e 0, 06
f 0, 05
TAB. 1.1 Rsultat
Symbole Mot de code
a 11
b 010
c 00
d 10
e 0111
f 0110
TAB. 1.2 Rsultat
Le code de Huffman construit est alors :
Thorme 1.4.1 Le code issu de lalgorithme de Huffman est optimal parmi tous
les codes instantans de S sur V .
Preuve
Prenons q = 2. Nos avons quun code instantat peut tre reprsent par un arbre
de Huffman. Soit A larbre reprsentant un code optimal, et H larbre reprsentant
le code issu de lalgorithme de Huffman.
Remarquons que dans A, il nxiste pas de noeud avec un seul ls dont les feuilles
contiennent des mots du code (en effet, on remplace un tel noeud par son ls et on
obtient un meilleu code).
Remarquons maintenant que dans A, si pour des mots c1 et c2 les probabilits
dapparitions respectives p1 et p2 satisfont p1 < p2, alors le sheuteurs respectives
des feuilles reprsentant c1 et c2 : l1 et l2 satisfont l1 l2 (en efet, dans le cas
contraire, on remplace c1 par c2 dans larbre et on obtient un code meilleur). On
peut donc supposer que A reprsente un code optimal pour lequel les deux mots de
plus faibles probabilits sont deux feuilles frres (admettnt le mme pre).
On raisonne maintenant par rcurrence sur le nombre de feuilles n dans A. Pour
n = 1, le rsultat est vident.
Pour n 2 quelconque, on considre les deux feuilles frres correspondant aux
13
COMPRESSION DE DONNES
mots c1, c2 de plus faibles probabilits dapparition p1, p2 dans A. Daprs le prin-
cipe de construction de Huffman, c1 et c2 sont des feuilles frres dans H. On dnit
alors H
, donc
de longueur moyenne infrieure A
1
. . . u
2m3
. Et le noeud fusionn est quelque part
dasn la liste. On prend ses deux ls, et on les mets la n, ce qui donne un ordre
de Gallager. u
1
. . . u
2m3
u2m2 u2m1.
Rciproquement, supposons que T admette u ordre de Gallager. Les noeuds sont
ordonns de la sorte
u1 . . . u2m3 u2m2 u2m1
o u2m2 et u2m1 sont les noeuds de poids minimal, qui sont des feuilles frres.
Soit T
3
3
5
5
5 6
ri dans
a
b
c
d
e
f
32
11
11 21
10
1
2
3
4 5
6
7
8
9
10
11
FIG. 1.4 Exemple dordre de Gallager sur un arbre
Nous considrons un texte (x1, x2, . . . , xn, . . .) et une instance de lalgorithme de
Huffman adaptatif sur ce texte. Nous notons Xn la source obtenue aprs lecture de
la n-me lettre et Tn un arbre de Huffman de cette source.
17
COMPRESSION DE DONNES
LA probabilit dune lettre de la source Xn est proportionnelle son nombre doc-
currence dasn les n premires lettres du texte. Ainsi sans rien changer aux dni-
tions (en particulier pour un ordre de Gallager), nous pourrons utiliser pour le poids
le nombre doccurrence de chaque lettre (la lettre vide a un nombre doccurrences
gal 0). Notons que dans ce cas, le poids est entier et que le poids de la racine
de Tn est n. Soit x la n + 1)-me lettre du texte. Soit u1, . . . , u2K1 est la feuille
vide.
Lemme 1.4.1 Si x Xn et si tous les noeuds uii
, ui2
, . . . , uil
du chemin entre x
et la racine de Tn sont les premiers de leur poids dans lordre de Gallager sur Tn
relativement Xn, alors Tn est un arbre de Huffman de Xn+1, et u1, . . . , u2K1
est un ordre de Gallager relativmeent Xn+1.
Preuve Si lon pose Tn+1 = Tn, le poids des noeuds reste inchang, sauf pour les
sommets uii
, ui2
, . . . , uil
du chemin de x la racine. Chacun de ces noeuds tant le
premier de son poids dans un ordre de Gallager sur Tn relativement Xn, lordre
reste dcroissant aprs lincrmentation des poids. LA condition sur les frres est
toujours vrie, car ni larbre ni lordre nont chang, et nous obtenons bien un
ordre de Gallager de Tn+1 relativement Xn+1.
Le cas ci-dessus est idal et nest pas vri en gnral. Toutefois, quite faire
quelques changes de noeuds dans larbre, on peut toujours sy ramener.
Pour dcrire les algorithmes nous allons munir les noeuds de trois champs :
pere un noeud
poids et ordre des entiers
Initialement, pour tout noeud de Tn
le champ pere contient le pre de u dasn Tn (nil sil sagit de la racine)
le champ poids contient le poids de u relativement (Tn, Xn)
le champ ordre contient lindice de u dans un ordre de Gallager sur Tn relative-
ment Xn
Lemme 1.4.2 Si x Xn, alors lissue de la procdure mise jour (x, T),
larbre Tn+1 dni par les champs pere est un code prxe de Xn+1. Les poids
sont relatifs (Tn+1, Xn+1) ( un coefcient multiplicatif prs), et les champs
ordre induisent un ordre de Gallager sur Tn+1 relativement Xn+1.
Preuve Les proprits suivants sont des invariants de la boucle :
deux noeuds partagent le mme pere ont des ordres conscutifs.
lordre des noeuds est celui des poids dcroissants.
De plus, puisque nous navons procd qu des changes de noeuds, la n de
lexcution, les champs pere dnissent un arbre binaire complet (que nous no-
tons Tn+1 possdant autant de feuilles que le cardinal de Xn (gal celui de
18
Algorithme 1.3 Mise jour (x, T)
u := noeud(x, T) ; la feuille de T dont la lettre associe est x
while u = nil do
u := min(v|v.poids = U.poids) ; le noeud de plus petit ordre ayant le poids
de u
echanger(u.pere, u.pere)
echanger(u.ordre, u.ordre)
u.poids := u.poids + 1
u := u.pere
end while
Xn+1). Il sagit donc dun code prxe de Xn+1. La valeur des poids est relative
(Tn+1, Xn+1), car une seule feuille a vu son poids augmenter, celle correspondant
x, les autres noeuds dont le poids a t incrment lont t conformment la
dntion du poids (le chemin de x la racine).
19
COMPRESSION DE DONNES
3
3
3
3
3
3
4
5
5
5
5
5
5
5
6
6
6
6
6
a
a
a
b
b
b
c
c
c
d
d
d
e
e
e
f
f
f
32
32
11
11
11
11
21
21
21
10
10
10
1
1
1
2
2
2
3
3
3
4
4
4
5
5
5
6
6
6
7
7
7
8
8
8
9
9
9
10
10
10
11
11
11
+1
+1
+1
12
33
FIG. 1.5 Illustration de la mise jour de larbre
20
Si x Xn, larbre doit augmenter de taille et aura 2K+2 noeuds au lieu de 2K. La
nouvelle lettre va occuper la place de la lettre vide, puis nous ajoutons une feuille
qui deviendra la nouvelle feuille vide.
Algorithme 1.4 Ajout dune feuille (x, T)
mise jour (x, T)
z := noeud(, T) (la feuille vide de T) ; z devient un noeud interne, ses deux
ls u et v sont crs ci-aprs
u := newfeuille(x, T) (nouvelle feuille associ x dans T)
u.pere := z ; u.poids := 1 ; u.ordre := 2K
v := newfeuille(, T) (nouvelle feuille vide de T)
v.pere := z ; v.poids := 1 ; v.ordre := 2K + 1
Lemme 1.4.3 Si x / Xn, alors lissue de la procdure ajouter feuille (x, Tn),
larbre Tn+1 dni par les champs pere est un code prxe de Xn+1. Les poids
sont relatifs (Tn+1, Xn+1) ( un coefcient multiplicatif prs), et les champs
ordre induisent un ordre de Gallager sur Tn+1 relativement Xn+1.
Preuve
Juste aprs lappel mise jour(, T), daprs les rsultats prcdents, les prorpi-
ts sur les ordre et sur les frres dasn larbre sotn vries. Lajout des feuilles
u et v ne change pas ces proprits, et les poids sont bien les poids relatifs
(Tn+1, Xn+1).
0
0
1
1
u2K1
u2K1
u2K+1
u2K
x
. . .
. . .
devient
FIG. 1.6 Illustration de lajout dune feuille de caractre x
Lalgorithme de Huffman adatatif ne pourra tre optimal que si la source est sans
mmoire. Dasn ce cas, conformment au but vis, les lemmes prcdents nous
permettent de montrer que localement , le code utilis est un code de Huffman
classique , et donc est optimal par rapport ce qui est connu de la source ce
moment l.
21
COMPRESSION DE DONNES
1.4.3.4 Dcompression dynamique
Lalgorithme 1.4.3.4 donne la dcompression. A linitialisation, le dcodeur conna-
pit un seul code, celui de @ (par exemple 0). Il lit alors 0 qui est le code associ
@. Il dduit que le sk bits suivants continnent un nouveau caractre/ Il recopie sur
sa sortie cesz k bits et met jour larbre de Huffman qui contient dj @, avec ce
nouveau caractre.
Il faut bien noter que le codeur et le dcodeur maintiennent chacun leur propre
arbre de Huffman, mais utilisent tous le sdeux le mme algorithme pour le mettre
jour partir des occurrences (frquences) des caractres dj lus. Aussi, les arbres
de Huffman calculs sparment par le codeur et le dcodeur sont les mmes.
Algorithme 1.5 Algorihtme de dcompression pour Huffman dynamique
Soit nb(c), le nobre doccurrence dun caractre c
Initialiser larbre de Huffman (AH) avec le caractre @, nb(@) := 1
while on nest pas la n du message do
Lire le mot de code c du message (jusqu une feuille de AH)
if c = @ then
nb(@) := nb(@) + 1
Lire dasn c les k bits du message et les afcher ne sorite
nb(c) := 0
else
Afcher le code de c dans AH
end if
nb(c) := nb(c) + 1
Mettre jour AH avec les nouvelles frquences
end while
Puis, le dcodeur lit le code suivant et le dcode via son arbre de Huffman. Sil
sagit du code de @, il lit les k bits correspondant un nouveau caractre, les crit
sur la sorite et ajoute le nouveau caractre son arbre de Huffman (le nouveau
caractre est dsormais associ un code). Sinon, il sagit du code dun caractre
dj rencontr ; via son arbre de Huffman, il trouve les k bits du caractre associ
au code, et crit sur la sortie. Il incrmente alors de un le nombre doccurences
du caractre quil vient dcrire (et de @ si cest un nouvzau caractre) et met
jour larbre de Huffman. Cette mthode dynamiue est peu moins efcace que
la mthode statique pour estimer les frquences. Il est probable que le message
cod sera donc un peu long. Mais elle vite le stockage de larbre et de la table
des frquences, ce qui rend le rsultat nal souvent plus court. Ceci explique son
utilisation en pratique dasn les utilitaires courants.
22
1.5 Heurisitques de rduction dentropie
En pratique, lalgorithme de Huffman (ou ses variantes) est utilis en conjonction
avec dautres procds de codage. Ces autres procds ne sont pas toujours opti-
maux en thorie mais ils font des hypothses raisonnables sur la forme des chiers
compresser pour diminuer lentropie ou accepter une destruction dinformation
suppose sans consquence pour lutilisation des donnes.
Nous prsenterons trois exemples de rduction dentropie. Le principe est de trans-
former un message en un autre, pa rune tranformation rversible (fonction bijec-
tive), de faon ce que le nouveau message ait une entropie plus faible, et soit donc
compressible plus efcacement. Il sagit donc dun codage pralable la compres-
sion, charg de rduire lentropie.
1.5.1 Run Length Encoding : RLE
Le codage statique tire parti des caractres apparaissant souvent, mais absolument
pas leur posotion dans le texte. Si un mme caractre apparat souvent rpt plu-
sieurs fois dafl, il peut tre utile de coder simplement le nombre de fois o il
apparait. Par exemple, pour transmettre une page par fax, le codage statique codera
le 0 par un petit mot de code, mais chaque 0 sera crit. Le codage RLE lit chaque
caractre la suite mais, lorsque au moins 3 caractres identiques successifs sont
rencontres, il afche plutt un code spcial de rptition suivi du caractre rp-
ter et du nombre de rptitions. Par exemple, avec &comme caractre de rptition,
la chane aabbbcddddd&ee est code par &a2&b3c&d5&&1&e2 (il est n-
cessaire demployer une petite astuce si le caractre spcial est rencontr pour le
rendre le code instantan).
Pour ne pas avoir le problme du caractre spcial de rptition qui se code for-
cment come une rptition de taille 1 les modems utilisent une variante de RLE
appel MNP5. Lide est de que lorsque 3 ou plus caractres identiques sont ren-
contrs, ces trois caractres sont afchs suivis dun compteur indiquant le nombre
dapparitions supplmentaires du caractre. Il faut bien sr convenir dun nombre
de bits xe attribuer ce compteur. Si le compteur dpasse son maximum, la
suite sera code par plusieurs blocs des 3 mmes caractres suivi dun compteur.
Par exemple, la chane aabbbcddddd est code par aabbb0cddd2 . Dans ce
cas, si une chane de n octets contient m rptitions de longueur moyenne L, le
gain de compression est
nm(L4)
n
si le compteur est sur un octet. Ce type de co-
dage est donc trs utile par exemple pour des images noir et blanc ou des pixels de
mme couleur sont trs souvent accols. Enn, il est clair quune compression sta-
23
COMPRESSION DE DONNES
tisitque peut tre effectue ultrieurement sur le rsultat dun RLE. Nous obtenons
lalgorithme 1.5.1.
Algorithme 1.6 Mthode RLE
repet := 0 ; compteur := 1
RefCar := entre[compteur]; CarCour := RefCar ;
while compteur longueur(entre) do
while RefCar = CarCour et compteur longueur(entre) do
incrmente(compteur) ; incrmente(rpte) ;
CarCour := entre[compteur] ;
end while
if rpte < 4 then
for i de 1 rpte do
crire(RefCar) ;
end for
else
crire(&,rpte,RefCar) ;
end if
rpte:= 0 ; RefCar:=CarCour
end while
La dcompression est immdiate : ds quon lit &nc, qui indique n rptition du
caractre c, on crit n fois c.
1.5.2 Move-to-Front
Il es tpossible de procder un pr-calcul lors de la transformation dun caractre
ASCII en sa valeur entre 0 et 255 : en modiant la vole lordre de la table. Par
exemple, ds quun caractre apparat dans la source, il est dabord cod par sa
valeur, puis il passe en dbut de list, et sera cod dornavant cod par un 0, tous
les autres caractres tant dcal dune unit. CE move-to-front permet davoir
plus de codes proches de 0 que de 255. Ainsi, lentropie est modie.
Par exemple, la chane aaaaffff peut tre modlise par une source dentropie 1,
si la table est (a, b, c, d, e, f, ). Elle est alors code par 00005555 . Lentropie du
code est 1. Cest aussi lentropie de la source. Mais le code dun Move-To-Front
sera 00005000 , dentropie H = 7/8 log
2
(8/7) + log
2
(8)/8 = 0, 55. Le code
lui-mme est alors compressible, cest ce quon appelle la rduction dentropie.
Le dcodage est simple : partir du mme tableau initial, il suft dmettre le
caractre correspondant lindice et de ranger le tableau en passant ce caractre en
premier. Le tableau volue exactement comme pendant la phase de codage.
24
D0 c o m p r e s1 s2 e2
D1 o m p r e1 s1 s2 e2 c
D2 m p r e1 s1 s2 e2 c o
D3 p r e1 s1 s2 e2 c o m
D4 r e1 s1 s2 e2 c o m p
D5 e1 s1 s2 e2 c o m p r
D6 s1 s2 e2 c o m p r e1
D7 s2 e2 c o m p r e1 s1
D7 e2 c o m p r e1 s1 s2
TAB. 1.3 BWT sur le mot compresse
1.5.3 BWT : Transformation de Burrows-Wheeler
Lide de lheuristique BWT est de trier les caractre dune chane an que le
Move-To-Front et le RLE soient les plus efcaces possibles. Le problme est bien
sr quil est impossible de retrouver la chane initiale partir dun tri de cette chaen !
Lastuce est donc de trier la chane, mais denvoyer plutt une chaen intermdiaire,
de meilleure entropie que la chane initiale, et qui permettent cependant de retrou-
ver la chane initiale. Consdierons le mote compress . Il sagit de crer tous
les dcalages possibles comme indiqu par la tableau 1.5.3, puis de trier les lignes
dans lordre alphabtique et lexicographique. La premire colonne F de la nouvelle
matrice des dcalages est donc la chane trie de toutes les lettres du mot source. La
dernire colonne sappelle L. Seules la premire et la dernire colonne sont crites,
car ce sont les seules importantes pour le code. Sur le tableau on diffrencie les oc-
currence dun mm caractre an de simplier la vision de la transformation mais
ninterviennenet pas dans lalgorithme de dcodage : en effet lordre des caractres
est forcment conserv entre L et F.
Biens sr, pour calculer F (la premire olonne) et L (la dernire colonne), il nest
pas ncessaire de stocker toute la matrice des dcalages, un simple pointeur se d-
plaant dans la chane est sufsant. Cette prmeire phase est donc assez simple.
Mais si seule la colonne F est envoe, comment effectuer la rciproque ? La so-
lution est denvoyer la chane L au lieu de la chane F : si L nest pas trie, elle
est cependant issue du tri dune chane quasiment semblable, simplement dcale
dune lettre. On peut donc esprer quelle conserve des proprits issues du tri et
que lentropie en sera rduite.
Concernant le dcodage, la connaissance de la chane, conjugue celle dun index
primaire (le numro de la ligne contenant la chane originel, dans lexemple prc-
dent cest la ligne 4, en nurotant de 0 8) permet de rcuprer la chane initiale. Il
25
COMPRESSION DE DONNES
F L
D0 c e2
D8 e2 s2
D5 e1 r
D2 m o
D1 o c
D3 p m
D4 r p
D7 s2 s1
D! s1 e1
TAB. 1.4 Les colonnes F et L aprs le tri
suft de trier L pour rcuprer F. Ensuite, on calcule un vecteur de transformation
H contenant la correspondance des indices entre L et F.
Pour lexemple, cela donne H = [4, 0, 8, 5, 3, 6, 2, 1, 7], car C est en position 4,
lindex primaire dans L, puis E2 est en position 0 dans L puis E1 est en position
8, . . . Ensuite, il faut se rendre compte en plaant l et F en colonnes, dans chaque
ligne deux lettres se suivant doivent se suivre dans le chane initiale : en effet, par
dcalage, la dernire lettre devient la prmeire et la prmeire devient la deuxime.
Ceci se traduit galement par le fait que j, L[H[j]] = F[j]. IL ne reste plus
qualors qu suivre cet enchaenement de lettres deux deux pour retrouver la
chane initiale, comme da,s lalgorithme 1.5.3.
Algorithme 1.7 Rciproque de la BWT
Soit l une chane de caractre et soit index
F := tri de L;
Calculer le vecteur de transformation H tel que L[H[j]] = F[j], j ;
for i de 0 Taille de L do
Afcher L[index] ;
index := H[index] ;
end for
En sortie de la transformation BWT, on obtient donc en gnral une chane den-
tropie plus faible, bien adapte un Move-To-Front suivi dun RLE. Lutilitaire de
compression bzip2 utilise cette suite de rductions dnetropie avant deffectuer un
codage de Huffman.
26
1.6 Codes compresseurs usuels
Ces algorithmes de compression portent aussi le nom de substitution de facteurs.
En effet, leur principe repose sur le remplacement de facteurs de lentre par des
codes plus courts. Ces codes reprsentent les indices des facteurs dans u diction-
naire qui est construit dynamiquement, au fur et mesure de la compression.
La plupart des programmes de compression dynamique utilisent une des deux m-
thodes proposes par Lempel et Ziv en 77 et en 78. Ces deux algorithmes par-
courent lentre comprimer de la gauche vers la droite. Ils remplacent les facteurs
rptes par des pointeurs vers lendroit o ils sont dj apparus dans le texte. Bien
que ces deux mthodes soient souvent confondues dasn la littrature, elles se dins-
tinguent grandement par le construction du dictionnaire. Il existe un grand nombre
de variantes de ces deux algorithmes. LZ77 est utilis dans lutilitaire gzip sous
UNIX.
1.6.1 Algorithme de Lempel-Ziv 77
1.6.1.1 La compression
Lide essentielle de cet algorithme est dutiliser une partie de la donne dentre
comme dictionnaire. Lalgorithme de compression fait glisser une fentre de N ca-
ractre sur la chane dentre de la gauche ver sla droite. Cette fentre est compose
de deux parties :
gauche le tampon de recherche de N F caractres qui constitue le diction-
naire courant des lettres qui ont t lues et comprimes rcemment ;
droite, le tampon de lecture de F caractres dans lequel se trouvent les lettres
en attente de compression
compres.
. . .
a ab bab abab ababb
tampon de recherche
aba bbb bab bbabb
tampon de lecture . . .
` a compres.
La meilleur correspondance est faite entre le facteur aba et le prxe aba, avec un
dcalage de 5, dune longueur de 3 caractres.
compres.
. . .
a ab bab abab ababb
tampon de recherche
aba bbb bab bbabb
tampon de lecture . . .
` a compres.
D =
1631 71 83 49 94 36 201 32
6 348 49 2 26 185 60 86
39 81 123 27 28 0 43 130
49 3 10 25 19 126 33 92
101 43 111 55 4 3 120 50
25 166 62 50 50 2 9 7
64 34 54 11 69 0 26 54
48 73 48 28 27 33 23 29
38
Enn, loeil humain donne plus dimportance la luminosit quaux couleurs. En
ne gardant que les premiers termes de la dcompression en luminance DCT (les
plus importants), on perd un peu dinformation mais limage reste visible. Cette
opration est appele quantication et cest la seule tape de tout codage JPEG qui
soit avec perte dinformation. Lopration consiste arondir la valeur C(i, j) =
DCT(i,j)
Q(i,j)
o Q est une matrice de quantication
Q =
16 11 10 16 24 40 51 61
12 12 14 19 26 58 60 55
14 13 16 24 40 57 69 56
14 17 22 29 51 87 80 62
18 22 37 56 68 150 29 77
24 35 55 64 81 150 29 92
49 64 78 87 103 121 120 101
72 92 95 98 112 100 103 99
C =
102 6 8 3 4 1 41 1
1 29 4 0 1 3 1 2
3 6 8 1 1 0 1 2
4 0 0 1 0 1 0 1
6 2 3 1 0 0 1 1
1 5 1 1 1 0 0 0
1 1 1 0 1 0 0 1
1 1 1 0 0 0 0 0