Sunteți pe pagina 1din 60

Cours doption : CODAGE

Eric Wegrzynowski
Caroline Fontaine
11 octobre 2002

Introduction
Linformatique est la science du traitement automatique de linformation. Ceci implique :
1. un traitement : interpretation des donnees, calcul (manipulation formelle), communication (transport dinformation : reseau, satellite, telephone portable, mais
aussi CD) ;
2. automatique : sans intervention humaine ;
3. une representation adequate de linformation : par des symboles (lettres alphabets latin et arabe et chiffres arabes et romains par exemple).
Cette representation est communement appelee codage, mais ses objectifs sont
differents selon les contextes :
codage de source : son but est doptimiser la place prise par les donnees, et debouche
sur la notion de compression ;
codes correcteurs derreurs : leur but est de permettre la restitution des donnees
apr`es leur transmission (au sens large), et ce malgre les modifications quelles
ont pu subir pendant cette transmission ; ils detectent et corrigent les erreurs.
cryptographie : confidentialite, authentification, signature . . .
On sinteressera ici aux deux premiers points seulement.

Chapitre 1
Representation des nombres
On regardera dans un premier temps le codage des nombres.

I Quelques syst`emes de representation des entiers naturels


Quest-ce quun nombre ? Il designe une quantite. On peut lui associer diverses
representations a` laide de symboles, appartenant a` des alphabets.
Exemple 1.1 dix, X et 10 sont trois representations du nombre 10 par des symboles.
dix : avec lalphabet latin A = {a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z} ;
X : avec lalphabet des chiffres romains A = {I, V, X, L, C, M, D} ;
10 : avec lalphabet des chiffres arabes A = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} .
Ces representations sont des mots (des suites finies de symboles) definis sur les alphabets A. De ces trois e critures, la derni`ere est la plus pratique pour effectuer des
calculs.

II

Entiers naturels : bases de numeration

1) Syst`eme decimal
Cest celui auquel on est le plus habitues : il utilise un alphabet de 10 chiffres et
prend en compte la position de ces chiffres.
Exemple 1.2 Le mot 2387 designe le nombre 2 103 + 3 102 + 8 10 + 7.
Tous les entiers naturels (positifs ou nuls) peuvent secrire de cette facon. Si, de
plus, on sinterdit le chiffre 0 a` gauche, alors tout entier naturel a une e criture unique.
5


CHAPITRE 1. REPRESENTATION
DES NOMBRES

2) Syst`eme de base b quelconque


Soit un entier b > 1.
Theor`eme 1.1 Pour chaque entier n N, n 6= 0, il existe un entier p 0 et des
entiers a0 , a1 , . . . , ap compris entre 0 et b 1 (avec ap 6= 0) tels que
n=

p
X

ak bk = ap bp + ap1 bp1 + . . . + a2 b2 + a1 b + a0 .

k=0

De plus, cette somme est unique si on suppose ap 6= 0.


preuve : (de lexistence de la decomposition)
On proc`ede par recurrence sur lentier n.
1) pour 1 n b 1, on prend p = 0 et a0 = n.
2) soit n b 1, et supposons que le theor`eme est verifie pour tout entier 1 k n.
Montrons quil est alors verifie pour n + 1. La division euclidienne de n + 1 par b nous
donne :
n + 1 = bq + r
avec
0 r < b.
Comme b > 1, on a q < n + 1. Dautre part, n b 1 entrane q > 0. On a alors
1 q n et on peut appliquer lhypoth`ese de recurrence sur q :
0

il existe un entier p et des entiers

a00 , a01 , . . . , a0p0

tels que q =

p
X

a0k bk .

k=0

On a alors
0

n+1=b

p
X

a0k bk

k=0

+r =

p
X

p0 +1

a0k bk+1

+r =

k=0

a0k1 bk + r

k=1

On pose ensuite p = p0 + 1 et


a0 = r
ak = a0k1 pour tout 1 k p

On a alors la decomposition
n+1=

p
X

ak b k

k=0

ce qui clot la demonstration.


II. ENTIERS NATURELS : BASES DE NUMERATION

Exemple 1.3 Prenons b = 2 et n = 135. On a


135
a0 = 1

2
67
a1 = 1

2
33
a2 = 1

2
16
a3 = 0

2
8
a4 = 0

2
4
a5 = 0

2
2
2
a6 = 0 1 < 2

Ceci signifie que


135 = 1 27 + 0 26 + 0 25 + 0 24 + 0 23 + 1 22 + 1 21 + 1 20 .
Si on convient de prendre tous les entiers compris entre 0 et b 1 comme symboles
(chiffres), le nombre n secrit ap ap1 . . . a1 a0 .
Exemple 1.4 Le nombre 135 secrit en base 2 : 10000111. Pour e viter la confusion
entres les e critures dans des bases differentes, on e crit : 13510 = 100001112
Algorithme de conversion :
param`
etres : un entier n 0 (`a convertir)
un entier b > 1 (la base)
r
esultat :
e criture de n dans la base b
Si n < b, alors [n]
sinon

diviser n par b : n = bq + r (avec 0 r < b)


mettre r a` droite de la representation en base b de q

3) Taille du codage des entiers en base b


On souhaite determiner le nombre de chiffres (symboles) permettant de representer
n en base b. On le note |n|b .
Theor`eme 1.2 Le nombre de chiffres dans lecriture (propre) dun entier n 1 en
base b est
|n|b = blogb nc + 1
Rappelons que bxc designe la valeur enti`ere inferieure de x :
bxc = max{i Z, i x},
et que le logarithme en base b de n, note logb n est defini par la relation :
logb n = x n = bx .


CHAPITRE 1. REPRESENTATION
DES NOMBRES

preuve : Tous les entiers n compris entre bp (inclus) et bp+1 (exclus) sont representes
a` laide dexactement p + 1 chiffres. Ceci signifie :
n, bp n < bp+1 |n|b = p + 1

(1.1)

Or on a e galement :
n, bp n < bp+1 p ln b ln n < (p + 1) ln b
ln n
p
<p+1
ln b
n
Puisque logb n = ln
, on a
ln b
ln n
< p + 1 = p = blogb nc
ln b
Des points (1.1) et (1.2) on deduit que |n|b = blogb nc + 1.
p

puisque b > 1

(1.2)

4) Bases les plus utilisees en informatique


binaire : base 2 alphabet {0, 1}, les symboles sont appeles bits
(binary digits).
hexadecimal : base 16
alphabet
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F }
(A = 10, B = 11, C = 12, D = 13, E = 14, F = 15).

III
1)

Autres codages des entiers naturels


Decimal code binaire (calculatrices de poche) : BCD (Binary
Coded Decimal)

Le principe en est tr`es simple : chaque chiffre decimal est represente en binaire sur
4 bits :
chiffre
decimal
0
1
2
3
4
5
6
7
8
9

codage binaire
sur 4 bits
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001


IV. REPRESENTATION
DES AUTRES NOMBRES

Pour coder un nombre en BCD, il suffit de juxtaposer le codage en binaire de tous


les chiffres de son e criture decimale.
Exemple 1.5 199710 = 0001 1001 1001 0111
avantage : la conversion en decimal (usuel) est tr`es facile.
inconvenient : on gaspille de la place ; sur lexemple precedent, 1997 occupe 16 bits
en BCD, alors quil nen prend que 11 en binaire classique.

2) Biquinaire (1956 sur IBM 605)


Dans ce syst`eme, chaque chiffre decimal est code sur 7 bits, dont 1 seul des 2 premiers vaut 1, et 1 seul des 5 derniers vaut 1 :
chiffre
codage
decimal biquinaire
0
01 00001
1
01 00010
2
01 00100
3
01 01000
4
01 10000
5
10 00001
6
10 00010
7
10 00100
8
10 01000
9
10 10000
avantage : la conversion en decimal (usuel) est tr`es facile, et on peut detecter les
erreurs.
inconvenient : on gaspille de la place ; sur lexemple precedent, 1997 occupe 28 bits
en biquinaire, alors quil nen prend que 11 en binaire classique.

IV Representation des autres nombres


1) Entiers relatifs (signes)
Il existe plusieurs representations.
a)

Signe + valeur absolue

On prend la representation binaire classique de la valeur absolue du nombre, et on


rajoute devant un symbole pour coder son signe (0 pour le +, 1 pour le ).
Exemple 1.6 codage de +23, 23 : 0 10112 , 1 10112 .
inconvenient : le 0 est code deux fois : +0 et 0.


CHAPITRE 1. REPRESENTATION
DES NOMBRES

10
b)

Complement a` b

Cette representation seffectue sur un nombre fixe n de symboles (ces symboles


sont pris dans lalphabet {0, . . . , b 1}). Si le nombre a` coder est positif ou nul, on
le code simplement en base b. Sil est strictement negatif, on e crit la valeur absolue en
base b classique, sur n symboles. Ensuite, chacun des symboles est remplace par son
complement a` b (x est le complement a` b de y si et seulement si x + y = b 1). Enfin,
on ajoute 1 a` la representation globale.
avantage : une seule representation de 0.
Exemple 1.7
1. on code 1890 en complement a` 10 sur des nombres de 4 chiffres
decimaux :
1 8 9 0
complement
8 1 0 9
ajout de 1
8 1 1 0
2. on code 6 en complement a` 2 sur des nombres de 4 chiffres binaires :
0 1 1 0
complement
1 0 0 1
ajout de 1
1 0 1 0
Remarque : lors du codage de la valeur absolue en binaire, le bit le plus a` gauche
(le plus significatif) doit e tre 0. Quand un entier relatif est code avec ce principe
(positif binaire, negatif complement a` deux), ce bit designe son signe : si
cest un 0 alors lentier est positif et il suffit de lire la valeur en binaire, si cest
un 1 alors le nombre est negatif et il faut decoder le complement a` deux.

2)
a)

Nombres fractionnaires (reels)


Virgule fixe
On utilise toujours le meme nombre de chiffres apr`es la virgule.

inconvenient : on ne peut pas coder de reels tr`es proches de 0.


b)

Virgule flottante
On represente les nombres de la mani`ere suivante :
n = M BE

o`u M (mantisse) et E (exposant) sont des entiers, et B (base) est un entier strictement
positif.


IV. REPRESENTATION
DES AUTRES NOMBRES

11

Exemple 1.8 Prenons lexemple de la norme IEEE 754 :


SM

simple precision :

SM 1 bits
E
8 bits
32 bits

M
23 bits

128 .. 127
0 .. 223 1

double precision :

SM 1 bits
E
11 bits
64 bits

M
52 bits

1024 .. 1023
0 .. 252 1

12

CHAPITRE 1. REPRESENTATION
DES NOMBRES

Chapitre 2
Codes, codages et decodages
Apr`es la representation des nombres, nous nous interessons ici a` la notion de codage, au sens general du terme : nous allons voir comment representer un suite de
symboles de mani`ere adequate, selon lutilisation que lon souhaite en faire.
En effet, on peut vouloir la coder pour :
la transmettre directement a` quelquun dautre : on choisira alors une representation
utilisant les lettres de lalphabet usuel, dans une langue commune (comme par
exemple le francais ou langlais) ;
la stocker sur un ordinateur : on essaiera de minimiser la place necessaire a` ce
stockage ;
la transmettre dun ordinateur a` un autre : on essaiera alors de minimiser les
risques de perte dinformation lors de cette transmission, en introduisant de la
redondance.
Ces cas ont un point commun : ils reposent tous sur la donnee dun alphabet A. On
definit ensuite un code qui permet de representer linformation a` laide des lettres (au
sens large) de lalphabet A.
Voici, a` titre dexemples, quelques codes cel`ebres :
1837 : code Morse pour le telegraphe ; alphabet {, , silence}
A : B : C : D : E : etc

S :

etc

1917 : code Baudot pour le telex, reseau telegraphique commute (CCITT n 2) ; code
sur 5 bits 32 mots binaires ; mais 2 jeux de caract`eres sont codes a` la fois
(lettre, figure), et on dispose de 2 caract`eres permettant de commuter entre les
deux types de caract`eres ; on peut donc coder au total 60 caract`eres differents.
A et : 00011, B et ? : 11001, . . .
1963 : code ASCII (American Standard Code for Information Interchange) (ISO 646,
CCITT n 5) ; code sur 7 bits 128 caract`eres
A : 1000001, B : 1000010, C : 1000011, . . .
Le code ASCII a e te e tendu a` plusieurs codes sur 8 bits 256 caract`eres. Par
exemple ISO8859 : A : 0100001, . . .
13


CHAPITRE 2. CODES, CODAGES ET DECODAGES

14

1991 - . . . : UNICODE Actuellement, on est en train de definir lUNICODE1 (ISO


10646), sur 16 bits 65536 caract`eres possibles (on en a defini environ 50000
pour linstant).

Alphabets et mots

Pour representer linformation, on utilise des symboles ou lettres dont lensemble


forme un alphabet.

1)

Alphabet

Definition 2.1 Un alphabet est un ensemble fini non vide. Ses e lements sont nommes
lettres ou symboles.
Exemples :
1. Lalphabet latin compose des 26 lettres usuelles A = {a, b, c, . . . , z}.
2. Lalphabet des 10 chiffres decimaux A = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}.
3. Lalphabet des deux symboles binaires A = {0, 1}.
4. Lalphabet des 16 chiffres hexadecimaux A = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F }.
5. Lalphabet des chiffres romains A = {I, V, X, L, C, D, M }.
6. Lalphabet du Morse A = {., , silence} 2 .

2)

Mots
Les lettres dun alphabet permettent de construire des mots.

Definition 2.2 On appelle mot sur un alphabet A toute suite finie de lettres de A. Le
mot nayant aucune lettre est nomme mot vide, et note .
Exemples :
1. codage et qwixusd sont deux mots construits avec les lettres de lalphabet
latin.
2. Lecriture decimale dun nombre entier est un mot construit avec les chiffres
decimaux. 2002 est un mot.
1
2

http ://www.unicode.org
Pourquoi fautil considerer quil y a un troisi`eme symbole (souvent oublie) dans le Morse ?

15

I. ALPHABETS ET MOTS

3) Longueur dun mot


Definition 2.3 La longueur dun mot est le nombre de lettres qui le composent.
On note |u| la longueur dun mot u.
Exemples
1. || = 0
2. |qwixusd| = 7
3. |2002| = 4

4)

Ensembles de mots construits sur un alphabet

Definition 2.4 Etant


donne un alphabet A et un entier naturel n, on definit :
n
A = ensemble des mots de longueur n construits avec les lettres de A
A+ = ensemble des mots non vides
A = ensemble de tous les mots
Autrement dit,
A+ =

n1

An

et

A =

An = A+

n0

{}

Representation arborescente de A : On peut donner une representation arborescente dun ensemble de mots, bien utile par la suite. La figure 2.1 montre une telle
representation dans le cas o`u lalphabet na quune seule lettre a (figure de gauche) et
dans le cas o`u il a deux lettres 0,1 (figure de droite).

a 
aa
aaa


P
PP


PP

PP

P 1
0 

"b
Q
"
b

Q
"
b

Q
"
b
b 11
Q 01
00
10"


T
A
A
A
 T
 A
 A
 A






A101
A
 A
T



L
000
001
010 011
100
110 111
L
L1011


 
10110

F IG . 2.1 Arbres des mots pour un alphabet a` une et a` deux lettres


CHAPITRE 2. CODES, CODAGES ET DECODAGES

16

Nombre de mots : Le nombre de mots sur un alphabet est e videmment infini. Mais
pour une longueur donnee, on se convainc aisement que pour un alphabet A ayant q
lettres on a
card(An ) = q n
Ainsi, il y a 2n mots sur un alphabet binaire.

5) Langages

Definition 2.5 Etant


donne un alphabet A, on appelle langage toute partie de A .

6)

Operation de concatenation

On peut definir une operation de concatenation sur les mots. Cette operation consiste
a` mettre bout a` bout les deux mots.
Definition 2.6 Etant donnes deux mots u et v sur un alphabet A, on definit le mot
concatene, note u.v, par
u.v = a1 . . . ap b1 . . . bq
si les deux mots u et v secrivent
u = a1 . . . ap ai A
v = b1 . . . bq bj A
Exemples
1. si u = timo et v = leon, alors u.v = timoleon.
2. si u = 10 et v = 110, alors u.v = 10110.
Definition 2.7 Lorsquun mot u peut secrire sous forme dune concatenation de mots
ui (u = u1 .u2 . . . . .un ), on dit que les ui sont des facteurs de u et que u1 .u2 . . . . .un est
une factorisation de u.
Proprietes de loperation de concatenation
associativite : u, v, w A , (u.v).w = u.(v.w)
e lement neutre : u A , .u = u. = u
longueur : u, v A , |u.v| = |u| + |v|
Remarque : Loperation de concatenation conf`ere a` lensemble des mots sur un alphabet une structure algebrique nommee monode.

7)

Prefixe dun mot

Definition 2.8 On dit que v est un prefixe (ou facteur gauche) de u sil existe un mot
w tel que u = v.w ; on designe par P re(u) lensembe des prefixes de u.

17

II. CODAGE
Exemple :

les prefixes du mot u = 10110 sont au nombre de 6 :


P re(u) = {, 1, 10, 101, 1011, 10110}

Lensemble des prefixes dun mot est lensemble des mots que lon rencontre le
long de la branche de larbre des mots menant de la racine au mot considere.
On remarquera que lon a toujours card(P re(u)) = |u| + 1.

II

Codage

Abordons maintenant la notion centrale de ce chapitre, celle de codage. Intuitivement un codage est lassociation de chaque symbole dun alphabet de depart ou
alphabet source a` un mot dun alphabet cible.
On notera dans tout ce qui suit S lalphabet source, et A lalphabet cible.
Exemples :
1. le code Morse associe a` chaque lettre de lalphabet latin (S) un mot construit sur
lalphabet A = {., , silence}.
2. le code ASCII associe a` chaque caract`ere ASCII un mot binaire de 8 bits.
Mais il ne suffit pas de convenit dune association dun mot sur lalphabet cible a`
chaque lettre de lalphabet source pour obtenir un codage.
Exemple
vantes :

Prenons S = {s1 , s2 , s3 , s4 }, A = {0, 1} et considerons les 2 tables suix


s1
s2
s3
s4

c1 (x)
1
00
01
01

c2 (x)
1
00
01
10

Il est e vident que lassociation c1 ne peut convenir pour un codage e tant donne
quaux deux lettres s3 et s4 est associe un meme mot : 01.
Moins e vident est le cas de lassociation c2 . Neanmoins, on peut facilement verifier
que les deux mots s1 s2 s1 et s4 s3 seraient codes en le meme mot : 1001. Comment
alors decoder ce mot ? Par consequent c2 ne peut convenir pour un codage.

1) Morphisme
Dans le dernier exemple cidessus, il a e te implicitement admis quune fois e tablis
les mots u1 et u2 associes a` deux lettres x1 et x2 , alors le mot associe au mot x1 x2
est u1 .u2 . Cela nous am`ene a` considerer une classe particuli`ere de transformations de
mots constituee des morphismes.


CHAPITRE 2. CODES, CODAGES ET DECODAGES

18

Definition 2.9 Une application c : S A , qui a` un mot de S associe un mot de


A , est un morphisme si elle verifie les deux conditions suivantes
1. c() =
2. u, v S

c(u.v) = c(u).c(v)

Autrement dit un morphisme est une application qui conserve loperation de concatenation :
limage de la concatenee de deux mots est la concatenee de leurs images.
Un morphisme est enti`erement determine si on connat limage de chacune des
lettres de lalphabet source.

Proposition 2.1 Etant


donnes un alphabet source S = {s1 , . . . , sn } et n mots u1 , . . . , un
sur lalphabet cible A, il existe un unique morphisme c : S A tel que
i {1, . . . , n}

2)

c(si ) = ui

Codage

Definition 2.10 Un codage des mots sur un alphabet source S en des mots dun alphabet cible A est un morphisme c : S A injectif. Cest`adire
u, v S

u 6= v c(u) 6= c(v)

Un codage e tant un morphisme, il est enti`erement determine par le langage des


mots associes aux lettres de lalphabet source. Ce langage est appele code associe.
Tout langage nest pas forcement un code.
Definition 2.11 Un langage C est un code, sil nexiste pas de mot ayant deux factorisations distinctes avec des mots de C.
Exemples :
1. le langage vide C = est un code ! (mais peu utile pour coder de linformation).
2. C2 = {1, 00, 10, 01} nest pas un code.
3. Tout langage ne contenant que des mots de meme longueur est un code qualifie
de code de longueur fixe.
Remarques :
1. Un code ne peut pas contenir le mot vide.
2. Tout sous-ensemble dun code est un code.
3. Cette definition des codes nimpose pas quun code soit un ensemble fini. Par
exemple le langage C = {01n | n N} est un code infini. Mais nous ne
consid`ererons que des codes finis dans ce cours.

III. CAS PARTICULIERS DE CODES

19

3) Decodage
Coder un mot u, cest donc trouver le mot v = c(u) qui lui est associe par un
codage c.
Inversement, decoder un mot v, cest retrouver le mot de depart u, i.e. son antecedant
par le codage c. Pour cela il suffit de trouver une factorisation de v avec des mots du
code C = c(S). Deux cas peuvent se presenter :
v se factorise et alors cette factorisation est unique, puisque C est un code.
v ne se factorise pas dans C. Cela signifie que v nest pas un mot obtenu par
codage dun autre mot.
Loperation de decodage est une operation plus ou moins simple selon la nature
des codes utilises.

III

Cas particuliers de codes

On la vu, nimporte quel langage nest pas un code. La question naturelle qui se
pose est alors : existe-t-il un algorithme qui permet de decider si oui ou non un langage
est un code ?
Lalgorithme de Sardinas-Patterson donne une reponse affirmative a` cette question,
comme nous le verrons plus loin.
Pour linstant nous allons examiner quelques cas particuliers de codes facilement
identifiables.

1) Codes de longueur fixe


On la dej`a signale, tout langage de mots ayant tous la meme longueur est un code.
Par exemple, le langage C3 = {010, 100, 110, 101} est un code. Il permet de coder
tout alphabet source de 4 lettres. Il est facile de voir quavec des mots binaires de
longueur 3, on peut coder tout alphabet source dont le nombre de lettres nexc`ede pas
8.
Le nombre total de mots de longueur n sur un alphabet a` q lettres est q n . Pour un
alphabet cible a` q lettres, il est donc possible de coder les lettres dun alphabet source
S avec des mots de longueur n, a` condition que card(S) q n .
Exemples : De nombreux codages utilises en informatique utilisent des codes de
longueur fixe : le code ASCII, lUNICODE, les codages bitmap dimages.

2) Codes a` virgule
Considerons le langage binaire C4 = {0, 01, 011, 0111}. Ces quatre mots partagent la propriete remarquable de tous commencer par la lettre 0, et de ne la contenir
qune seule fois. Ils ne se distinguent que par le nombre de 1 qui suivent. Il sensuit que


CHAPITRE 2. CODES, CODAGES ET DECODAGES

20

toute concatenation de ces quatre mots ne peut e tre obtenue que dune seule mani`ere,
et donc C3 est un code.
Pour les memes raisons le langage C40 {0, 10, 110, 1110} est un code.
Dans ces deux exemples, le role joue par la lettre 0 est celui dun delimiteur : soit
un marqueur de debut, soit un marqueur de fin de mot du code.
De mani`ere generale, on peut transformer tout langage en un code en rajoutant
en tete ou en queue de chaque mot une nouvelle lettre napparaissant dans aucun des
mots.
Proposition 2.2 Soient A un alphabet, ] une lettre nappartenant pas a` A et A0 =
A {]}. Pour tout langage C A , C.] est un code sur lalphabet A0 .
De tels codes sont appeles codes a` virgule.
Exemples :
1. C2 ] = {1], 00], 10], 01]} est un code.
2. le Morse est un code a` virgule, les silences en faisant office.

3)

Codes prefixes

Etudions
maintenant le langage C5 = {0, 11, 100, 101}. Il nest ni de longueur
fixe, et aucun symbole ne sert de delimiteur.
Pourtant il jouit dune bonne propriete : aucun mot nest un prefixe dun autre mot
de lensemble. De tels ensembles sont qualifies de prefixes.
Definition 2.12 Un langage C A est dit prefixe sil satisfait a` la condition (dite
du prefixe) :
u, v C, u 6= v, u 6 P re(v) et v 6 P re(u)
Exemple 2.1 C5 est prefixe.
Proposition 2.3 Tout langage prefixe de mots est un code.
preuve : Il suffit de prouver quun langage qui nest pas un code ne peut pas e tre
prefixe.
Considerons donc un langage C qui nest pas un code et un mot w A ayant
deux factorisations dans C :
w = u1 .u2 . . . up
= v1 .v2 . . . vq

avec u1 , . . . , up C
avec v1 , . . . , vq C

On peut ici supposer sans perte de generalite que u1 6= v1 (si ce nest pas le cas,
soit ` le premier indice pour lequel u` 6= v` ; on supprime des deux factorisations les
premiers termes u1 = v1 , . . ., u`1 = v`1 ).

IV. ALGORITHME DE SARDINAS-PATTERSON

21

Alors, comme u1 6= v1 , on a |u1 | =


6 |v1 |, et donc
soit
soit

|u1 | < |v1 |


|u1 | > |v1 |

et alors u1 est prefixe de v1


et alors v1 est prefixe de u1

et on peut conclure que le code nest pas prefixe.

On peut remarquer que la reciproque de cette proposition nest pas vraie (voir le
code C4 ).

IV

Algorithme de Sardinas-Patterson

Il existe des codes qui ne sont pas de longueur fixe, a` virgule ou prefixe. Il en
est ainsi de C6 = {00, 01, 110, 001}. Ce langage nentre pas dans lune des trois
categories citees, et pourtant cest un code. Sil ne letait pas, on pourrait trouver un
mot w ayant deux factorisations avec des mots de C6 :
w = u1 .u2 . . . . un = v1 .v2 . . . . vm
o`u n et m sont deux entiers (non nuls) et les ui et vi des mots de C.
Si u1 6= v1 , alors necessairement lun des deux est un prefixe de lautre. Supposons
que cest u1 qui est un prefixe de v1 . En observant les mots de C6 , on trouve alors que
u1 = 00 et v1 = 001.
La derni`ere lettre de v1 e tant un 1, u2 doit commencer par cette lettre et donc
u2 = 110. Finalement, le mot v2 doit commencer par 10 et C6 ne contient pas de tel
mot.
En consequence les deux mots u1 et v1 sont necessairement e gaux. De la meme
mani`ere on doit avoir n = m et ui = vi pour tout i, ce qui prouve que w ne peut pas
avoir deux factorisations distinctes.
Il nest pas toujours aussi facile de traiter `a la main lanalyse dun langage pour
decider sil est ou non un code. La suite de cette section e tablit un algorithme pour le
faire.

1) Residuel
Definition 2.13 Soit L A un langage et u A un mot. On appelle langage
residuel a` gauche de L par u, le langage note u1 .L defini par
u1 .L = {v A | w L tq w = u.v}
Le residuel (`a gauche) dun langage L par u est donc constitue des mots de L dont
u est un prefixe, et desquels on a supprime ce prefixe.


CHAPITRE 2. CODES, CODAGES ET DECODAGES

22
Exemples :

Avec L = {1, 001, 1001, 1011}, u1 = 01, u2 = 10 et u3 = 1, on a

1. u1
1 .L = car aucun mot de L ne commence par u1 .
2. u1
ebut des deux mots 1001 et 1011.
2 .L = {01, 11} car u2 est le d
3. u1
ebut des trois mots 1, 1001 et 1001.
3 .L = {, 001, 011} car u3 est le d
Remarques :
1. u1 .L u L
2. si u nest le prefixe daucun mot de L, u1 .L est vide.

2)

Langage quotient

Definition 2.14 Soit L et M deux langages. On appelle quotient a` gauche de L par


M le langage note M 1 .L et defini par
M 1 .L =

u1 .L

uM

Autrement dit M 1 .L est la reunion de tous les residuels a` gauche de L par les mots
de M . M 1 .L designe donc en quelque sorte les suffixes (la fin) des mots de L qui ont
comme prefixe un mot de M .
Exemple : en reprenant lexemple precedent, et en posant M = {u1 , u2 , u3 }, on a
M 1 .L = {, 01, 11, 001, 011}
Remarques :
1. M 1 .L est vide si et seulement si aucun mot de M nest un prefixe dun mot de
L. En particulier, si L est un langage prefixe, L1 .L est vide.
2. M 1 .L si et seulement si L et M contiennent un meme mot. En particulier,
pour tout langage non vide L, on a L1 .L.

3)

Lalgorithme
donn
ees :
but :

un langage L sur un alphabet A


decider si L est un code ou non.

23

IV. ALGORITHME DE SARDINAS-PATTERSON


On calcule les ensembles Ln suivants :
L0
L1
Ln

= L
= L1 .L \ {}
= L1 .Ln1 L1
n1 .L

pour n 2

jusqu`a ce que lon retombe sur un Ln dej`a calcule precedemment, ou que le mot vide
appartienne au Ln que lon vient de calculer.
Si appartient a` lun des Li , alors le code nest pas decodable de mani`ere unique,
sinon cest que le code est decodable de mani`ere unique.
Cet algorithme sarrete, car le nombre densembles Li distincts que lon peut calculer est fini (chacun deux est une partie de lensemble des suffixes de L, qui lui-meme
est fini).
Exemples : Considerons lalphabet A = {0, 1}.
1. Prenons le langage C2 defini precedemment :
L = C2 = {1, 00, 01, 10}
On a :

L0 = {1, 00, 01, 10}


L1 = {0}
L2 = {0, 1}
L3 = {, 0, 1}
On sarrete car L3 . On en conclut que C2 nest pas un code (ex : 101 peut
e tre interprete comme 10 1 ou 1 01).
2. Prenons le langage C5 defini precedemment :
L = C5 = {0, 11, 100, 101}
On a :

L0 = {0, 11, 100, 101}


L1 =
Ln =
n 2
On sarrete car L2 = L1 . Aucun des ensembles Li ne contient , et on en conclut
que C3 est un code.
3. Prenons le langage :
L = {000, 010, 011, 01001}
On a :
L0
L1
L2
L3
L4
L5

=
=
=
=
=
=

{000, 010, 011, 01001}


{01}
{0, 1, 001}
{00, 10, 11, 1001}
{0}
{00, 10, 11, 1001}


CHAPITRE 2. CODES, CODAGES ET DECODAGES

24

On sarrete car L5 = L3 . Aucun des ensembles Li ne contient , et on en conclut


que L est un code.

Inegalite de Kraft

La longueur des mots dun code peutelle e tre arbitrairement petite ? Evidemment
non. Un code ne peut pas contenir trop de petits mots. Par exemple, un code ne
peut pas contenir toutes les mots dune lettre et dautres mots.
Les deux theor`emes qui suivent donnent une reponse precise a` cette question.

1)

Representation graphique dun code prefixe

Un code prefixe est representable par un arbre dont les feuilles sont les mots du
code.

Exemples :
1. le code prefixe C5 est represente par larbre suivant :

@
@
@

0
10

@
@
@

11

@
@
@

100

101

Il y a au maximum un mot du code (mots encadres) par branche issue de la racine


de larbre.
2. en revanche pour le code C4 , qui nest pas prefixe, on sapercoit que certaines
branches de larbre contiennent plusieurs mots du code


V. INEGALIT
E DE KRAFT

25

0
@
@
@

01
@
@
@

011
@
@
@

0111

2) Inegalite de Kraft
Theor`eme 2.1 (Inegalite de Kraft) Soit un alphabet A de q lettres et n un entier naturel non nul. Il existe un code prefixe contenant n mots de A , de longueurs respectives `1 , `2 , . . . , `n , si et seulement si linegalite suivante, appelee inegalite de Kraft,
est verifiee :
n
X
q `i 1
i=1

preuve : on peut supposer sans perte de generalite (quitte a` les considerer dans un
autre ordre) que `1 `2 . . . `n .
1 - Condition necessaire : il existe un code prefixe inegalite.
Le mot le plus long est de longueur `n . Larbre de tous les mots de A de longueur
`n a une hauteur `n , et contient q `n feuilles.
Soit C un code prefixe. Les mots de C sont des nuds de cet arbre.
Comme C est prefixe, il ny a pas deux mots de C sur la meme branche de larbre.
Ainsi, quand on a situe un mot de C dans larbre, on sait que tous les feuilles situees
dessous ne feront pas partie de larbre de C. Si ce mot est de longueur `i ,P
on supprime
ainsi q `N `i feuilles de larbre global. Au total, on en e limine donc ainsi ni=1 q `N `i .
Ce nombre de feuilles e liminees ne peut pas e tre plus grand que le nombre total de
feuilles, q `N . Ceci signifie quon a forcement
n
X

q `N `i q `N

i=1

et donc, en divisant pas q `N ,


n
X

q `i 1

i=1

2 - Condition suffisante : inegalite il existe un code prefixe.


CHAPITRE 2. CODES, CODAGES ET DECODAGES

26

On consid`ere larbre de A . On choisit un nud a` la profondeur `1 , et on e limine


toutes les feuilles situes en-dessous. Comme linegalite du theor`eme est verifiee, on a
q `1 < 1, et donc q `N `1 < q `N .
Il reste donc des chemins de longueur `N . On choisit un nud a` la profondeur `2 ,
et on recommence . . . etc.

Ce resultat donne une condition necessaire et suffisante pour lexistence dun code
prefixe, mais il faut e tre prudent : ce nest pas parce que les longueurs des mots dun
ensemble donne satisfont linegalite de Kraft que cet ensemble verifie la propriete
detre prefixe.
La CNS e noncee est en fait une CNS pour lexistence dun code (non necessairement
prefixe) de n mots de longueurs `1 , `2 , . . . , `N . Ce resultat sera admis ici et a e te formule par Mac Millan :
Theor`eme 2.2 (MacMillan) Soit un alphabet A de q lettres et n un entier naturel non
nul. Il existe un code contenant n mots de A , de longueurs respectives `1 , `2 , . . . , `n ,
si et seulement si linegalite suivante est verifiee :
n
X

q `i 1

i=1

La seule difference existant entre lenonce de ce theor`eme et celui du theor`eme


precedent est dans la nature du code considere : code prefixe dans le premier theor`eme,
code quelconque dans celuici.
L`a encore, ce theor`eme donne une CNS sur lexistence dun code ayant des mots
de longueurs donnees. Il permet simplement de dire, pour un langage donne, que :
si les longueurs des mots ne satisfont pas linegalite, alors ce langage nest pas
un code.
si les longueurs des mots satisfont linegalite, alors ce langage peut e tre un
code, mais nen est pas necessairement un. Il faut alors utiliser lalgorithme de
Sardinas-Patterson pour trancher.
Exemple : Soit le langage C = {0, 10, 1101, 1110, 1011, 110110} defini sur A =
{0, 1}. On a q = 2, n = 6, `1 = 1, `2 = 2, `3 = `4 = `5 = 4, `6 = 6. Donc on a
n
X
i=1

q `i =

1 1
1
1
1
1
61
+ +
+
+
+
=
<1
2 4 16 16 16 64
64

Ce langage satisfait don linegalite de Kraft, et dapr`es le theor`eme de Mc-Millan il


peut e tre un code. En estil un ? On applique lalgorithme de Sardinas-Patterson :
L0 = {0, 10, 1101, 1110, 1011, 110110}
L1 = {11, 10}
L2 = {, . . .}


V. INEGALIT
E DE KRAFT

27

Par consequent, L nest pas un code. On peut voir, en analysant le deroulement de cet
algorithme que lambigute concerne des suites de lettres du type 101101 . . .

28

CHAPITRE 2. CODES, CODAGES ET DECODAGES

Chapitre 3
Codage optimal
Nous allons nous interesser ici a` lotimisation de lespace occupe par les donnees
codees. Nous allons donc e tudier la longueur des mots de code, et comprendre comment construire des codes efficaces (qui minimisent la longueur moyenne de ces mots).
Dans ce chapitre, et dans toute la suite du cours, on ne sinteressera quaux codes
decodables. En effet, quel est linteret dutiliser un codage non decodable ? On peut
dailleurs remarquer que dans la litterature la notion de code sous-entend decodable.
Une premi`ere remarque, a` la lecture du theor`eme de MacMillan, est que si on utilise
des mots de code longs, linegalite est plus facilement verifiee ; donc, il y a plus de
chance quun code decodable de mani`ere unique existe si lon autorise lutilisation de
mots de code longs. Dun autre cote, si on utilise trop de mots longs, alors la longueur
du message code va e tre tr`es grande, et son stockage ne sera pas aise. On sent donc
quil faut trouver un compromis : utiliser des mots longs, mais pas trop.
Mais comment faire pour e valuer ce compromis, et le realiser au mieux ? On remarque que les symboles de la source napparaissent pas tous avec la meme frequence
pour un ensemble donne de messages (par exemple si on consid`ere les textes e crits
en francais). On est donc tente dutiliser des mots de code courts pour coder les symboles les plus frequents, diminuant ainsi la longueur moyenne des mots de code, et
ameliorant lefficacite du code.
Nous allons ici construire une certaine classe de codes optimaux.

I Longueur moyenne
On associe a` chaque symbole de la source S une frequence dapparition dans un
message source. Il sagit en fait dune probabilite dapparition.
Definition 3.1 Une mesure de probabilite, ou distribution de frequences, est une application de la forme
f : S [0, 1] R
x 7 f (x)
29

30

CHAPITRE 3. CODAGE OPTIMAL

avec la propriete que


X

f (x) = 1 .

xS

Connaissant la distribution des frequences dapparition des symboles de la source


S, et e tant donne un codage C defini sur S, on peut se poser la question : Quelle est
en moyenne, la longueur du codage dun symbole de la donnee source ?.
Definition 3.2 Soit C un code, C : S A . La longueur moyene dun mot de code,
relativement a` la distribution f de la source, est
X
n=
f (x) |C(x)| .
xS

Remarquons quen toute rigueur cette longueur moyenne depend du code considere
et de la distribution des frequences de la source ; on devrait donc utiliser une notation
du type nC,f . Cependant, on utilise en general une notation allegee lorsquil ny a pas
dambigute au sujet du code ou de la distribution des freqences consideres.
Exemple 3.1 Soit la source S = {s1 , s2 , s3 , s4 }, avec la distribution de frequences
suivante :
x f (x)
s1 0, 3
s2 0, 3
s3 0, 25
s4 0, 15
On a de mani`ere generale pour un codage C defini sur S :
n = 0, 3 |C(s1 )| + 0, 3 |C(s2 )| + 0, 25 |C(s3 )| + 0, 15 |C(s4 )|.
Reprenons maintenant trois des codages binaires definis precedemment :
x
s1
s2
s3
s4

C2 (x)
1
00
01
10

C3 (x)
0
11
100
101

C5 (x)
00
01
001
110

Comparons les longueurs moyennes qui leur sont asociees :


nC2 = 0, 3 1 + 0, 3 2 + 0, 25 2 + 0, 15 2 = 1, 7
nC3 = 0, 3 1 + 0, 3 2 + 0, 25 3 + 0, 15 3 = 2, 1
nC5 = 0, 3 2 + 0, 3 2 + 0, 25 2 + 0, 15 2 = 2
Donc, en moyenne, le codage dune information avec C2 est plus court que le codage
avec C5 , qui est lui-meme plus court que le codage avec C3 .

31

I. LONGUEUR MOYENNE

Exemple 3.2 Considerons maintenant la source constituee des lettres de lalphabet


latin et de lespace : S = {A, B, . . . , Z, espace}. On va considerer ces lettres sans
distinction du fait que ce sont des majuscules ou des minuscules. Le tableau suivant
donne les frequences dappartition de ces lettres en francais (ces mesures sappuient
sur des donnees statistiques) ; les trois derni`eres colonnes presentent des codages pour
cet ensemble de symboles.
Symbole
espace
E
S
A
N
T
I
R
U
L
O
D
C
P
M
V
G
Q
F
B
H
X
J
Y
Z
K
W

frequences Longueur fixe Code virgule


0,1835
00000
0
0,1486
00001
10
0,0697
00010
110
0,0640
00011
1110
0,0623
00100
...
0,0572
00101
0,0591
00110
0,0555
00111
0,0506
01000
0,0465
01001
0,0459
01010
0,0260
01011
0,0259
01100
0,0256
01101
0,0245
01110
0,0100
01111
0,0083
10000
0,0081
10001
0,0078
10010
0,0064
10011
0,0061
10100
0,0031
10101
0,0023
10110
0,0021
10111
0,0008
11000
...
0,0001
11001
111. . .110
0,0000
11010
111. . .111

Code de Huffman
111
110
1011
1010
1001
0110
1000
0101
0011
0001
0000
01110
01001
01000
00101
001000
0111110
0111101
0111100
0010011
0010010
01111110
011111110
0111111111
01111111101
011111111001
011111111000

longueur fixe : si on souhaite coder ces symbole a` laide dun code de longueur fixe
n, la plus petite longueur n envisageable est 5 car Card(S) = 27 et
24 < 27 25 . La longueur moyenne est ici n = 5.
code virgule : ce type de code consiste en lutilisation dun symbole de separation
entre les mots, ce qui l`eve toute ambigute lors du decodage. Lexemple presente
ici nous donne n = 6, 3034. Ce code nest pas tr`es efficace ici car les probabilites dapparitions des symboles de la source sont assez proches les unes des

32

CHAPITRE 3. CODAGE OPTIMAL

autres. Il le serait beaucoup plus si plus de symboles apparaissaient vraiment


tr`es souvent, et plus quasiment jamais.
code de Huffman : en fait, le codage de Huffman est optimal, comme on le verra plus
loin. On a ici n = 3, 4929.
Remarque : on peut aller plus loin en considerant non pas les symboles de la
source un a` un, mais en exploitant le fait que certains se suivents plus que dautres.
Par exemple, en francais, un q est tr`es frequemment suivi dun u. Ce phenom`ene
ne sera pas pris ici en consideration, et on travaillera sous lhypoth`ese que les symboles
de la sources sont independants les uns des autres.

II

Codage optimal : definitions et proprietes

Definition 3.3 Un codage C de S est dit optimal au regard de la distribution f sil est
decodable de mani`ere unique et quil nexiste auncun autre codage decodable C 0 tel
que nC 0 < nC .
On va donc e tudier quelles proprietes verifie un tel codage existe, et comment en
construire.
Une premi`ere remarque est quun code optimal nest, a priori, pas unique.
Exemple 3.3 Voici par exemple deux codes optimaux pour une source composee de
trois symboles de meme frequence :
s f (s) C1 (s) C2 (s)
1
s1
1
0
3
1
s2
00
10
3
1
01
11
s3
3
Proposition 3.1 Soit S une source, et f la distribution des frequences de ses symboles.
Soit C un codage optimal pour la distribution f . Alors il existe un codage prefixe C 0
qui est optimal pour f et tel que pour tout symbole x de la source : |C 0 (x)| = |C(x)|.
preuve : Ceci provient du theor`eme de MacMillan et de linegalite de Kraft. Supposons quil existe un codage optimal ; ses param`etres (longueur des mots, . . .) satisfont
linegalite de Kraft (cf. MacMillan). Et donc il existe un codage prefixe ayant ces
memes param`etres (cf. Kraft).

Ce resultat implique quon peut restreindre letude aux codes prefixes ; on sera
alors certains de travailler sur des codes decodables.
Proposition 3.2 La longueur des codes des lettres dans un codage optimal
C : S A est une fonction decroissante de leur frequence :
x, y S, f (x) > f (y) = |C(x)| |C(y)|.


ES

II. CODAGE OPTIMAL : DEFINITIONS


ET PROPRIET

33

preuve : Nous allons demontrer la contraposee : sil existe deux symboles x et y tels
que f (x) > f (y) et |C(x)| > |C(y)| alors C nest pas un codage optimal.
On suppose donc quil existe deux symboles x et y tels que f (x) > f (y) et
|C(x)| > |C(y)|. Soit C 0 le codage defini par

C 0 : S A
0
C (z) = C(z)
C 0 (y) = C(x)
z 7
0
C (x) = C(y)

si z 6= x, y

Comparons maintenant les longueurs moyennes de C et C 0 ; on a


nC 0 = nC f (x) |C(x)| f (y) |C(y)| + f (x) |C 0 (x)| + f (y) |C 0 (y)|
= nC f (x) |C(x)| f (y) |C(y)| + f (x) |C(y)| + f (y) |C(x)|
= nC (f (x) f (y)) (|C(x)| |C(y)|)
Or, on sait que x et y sont tels que (f (x) f (y)) (|C(x)| |C(y)|) > 0 ; on a donc
nC 0 < nC , et comme C 0 est decodable (memes mots de code que C), ceci implique
que C nest pas optimal.

Attention, la reciproque nest pas vraie : ce nest pas parce quun code verifie cette
propriete des longueurs de mots quil est optimal.
Exemple 3.4 Voici par exemple deux codes pour une source composee de trois symboles de meme frequence :
s f (s) C1 (s) C2 (s)
1
s1
00
0
3
1
s2
01
10
3
1
s3
10
11
3
Le code C1 verifie
x, y S, f (x) > f (y) = |C(x)| |C(y)|
mais nest pas optimal : nC1 = 2 > nC2 = 53 .
Ce resultat confirme lidee que les symboles les plus frequents sont codes par les
mots les plus courts.
Desormais, on se restreint aux codages binaires : A = {0, 1}.
Proposition 3.3 Soit C : (S, f ) {0, 1} un codage binaire prefixe optimal pour la
distribution f . Larbre de C est alors complet : chaque nud (interne) de larbre de C
a exactement deux fils. Autrement dit, pour tout x S, tous les prefixes de C(x) autres
que lui-meme sont prefixes dautres mots du code.

34

CHAPITRE 3. CODAGE OPTIMAL

preuve : Raisonnons par labsurde : on suppose quil existe un code binaire prefixe
optimal dont larbre nest pas complet. Il existe dans cet arbre un nud qui na
quun seul fils. Le code e tant prefixe, ses mots sont des feuilles de larbre ; donc si
on remplace le nud par le sous-arbre quil gen`ere (on remonte ce sous-arbre dun
cran : voir le schema), on obtient larbre dun autre code prefixe, dont les mots sont
plus courts. C nest alors pas optimal, ce qui contredit lhypoth`ese de depart.
Q



A
 A

A

00

01

Q
Q
Q




A
 A

A

devient

Q

Q
Q

Q

A
A
 A
 A

A

A

00

01

10

11

100 101
On peut formaliser ce raisonnement de la mani`ere suivante : on suppose que le
code prefixe optimal C est tel quil existe un x S tel quun de ses prefixes, disons u,
nest prefixe daucun C(y), y S, y 6= x. Soit C 0 un deuxi`eme code defini par :
C 0 : S {0, 1} 
C(y)
y 7 C 0 (y) =
u v0

si C(y) nadmet pas u comme prefixe


si C(y) = u v, v 0 designant v prive de sa 1`ere lettre

Comme C est prefixe, C 0 lest aussi. De plus, on a nC 0 < nC (puisque |C 0 (y)| < |C(y)|
d`es que u est prefixe de C(y), et |C 0 (y)| = |C(y)| pour les autres). Ceci rentre en
contradiction avec le fait que C est un code optimal.

Corollaire 3.1 Soit C : (S, f ) {0, 1} un codage binaire prefixe. Alors les deux
symboles les moins frequents de S sont codes par deux mots de meme longueur qui ne
diff`erent que par leur dernier bit.
Pour les codages binaires optimaux, linegalite de Kraft devient une e galite.
Proposition 3.4 Soit C un codage binaire optimal de la source (S, f ), et soient n1 , . . . , nN
les longueurs respectives des mots de code. Alors linegalite de Kraft devient une
e galite :
N
X
2ni = 1
i=1

preuve : laissee en exercice.

Attention, un code satisfaisant legalite nest pas forcement optimal : il faut prendre
en compte lassociation des symboles de la source aux mots de code (si on associe un
mot long a` un symbole frequent, le codage ne sera pas optimal).

35

III. CODAGE OPTIMAL : CONSTRUCTIONS

III

Codage optimal : constructions

On se restreint dans tout ce qui va suivre aux codages binaires : A = {0, 1}.

1) Cas de la distribution uniforme


Soit N le nombre de symboles de la source ; on part dun code de longueur fixe
minimale p, avec 2p1 < N 2p . Si N = 2p , alors on ne peut pas faire mieux. Par
contre, si N < 2p , on peut remplacer 2p N mots par des mots de longueur p 1.
Exemple 3.5 Soit N = 5 et pour tout symbole x de la source, f (x) = 1/5. On
construit un code de longueur fixe minimale : cette longueur est p = 3 puisque
22 < 5 < 23 . On obtient par exemple le code {000, 001, 010, 011, 100}. On peut
remplace 8 5 = 3 mots par des mots de longueur p 1 = 2. Voici les deux arbres
correspondant a` ces codes : a` gauche le code de longueur fixe, a` droite le code optimal.
HH

A
 A

A





@
@
@
A
 A

A

H





000 001 010 011 100

2)





@
@
@

HH
H
H

A
 A

A

01

HH
HH
H
@
@
@

10

11

000 001

Cas dune distribution de la forme f (x) =

1
2k

Soit S = {s1 , . . . , sN } la source a` coder, et fi = f (si ) les frequences associees aux


symboles. On suppose dans ce paragraphe que ces frequences sont de la forme 21k , avec
k

1, et que les symboles sont ordonnes, de mani`ere a` avoir


f1 f2 . . .
PfN (on peut le supposer sans perte de generalite). Rappelons que par
definition on a i fi = 1.
La proposition suivante e tablit qu`a partir de tout codage optimal dune source
ayant au moins deux symboles, on peut decouper cette source en deux et extrire du
codage optimal deux codages optimaux pour chacun des deux morceaux de la source.
Proposition 3.5 Soit C un codage binaire prefixe optimal pour la distribution f . Les
sous-arbres gauche et droit induisent des codages optimaux C1 et C2 pour les sources
S1 (des lettres dont le code commence par un 0) et S2 (des lettres dont le code commence par un 1), avec les distributions f1 et f2 qui sont les restrictions respectives de
f a` S1 et S2 :
f (s)
fi (s) = P
pour i = 1, 2
xSi f (x)
Voici une methode proposee par R.M. Fano pour construire un code optimal :

36

CHAPITRE 3. CODAGE OPTIMAL


si N = 1, alors on associe le mot vide au symbole.
si N = 2, alors on a forcement f1 = f2 = 12 et le code optimal est le code de 2
mots de longueur 1 : au premier symbole on associe la lettre 0, et au deuxi`eme
la lettre 1.
si N > 2, on proc`ede recursivement :
1. on peut regrouper les symboles de la source en deux ensembles S1 et S2
tels que
X
X
1
f (s) =
f (s) =
2
sS
sS
1

2. on attribue la lettre 0 aux symboles de S1 , et la lettre 1 aux symboles de S2 .


3. pour chacun de ces ensembles, on reapplique separement la procedure en
ponderant les frequences comme indique a` la proposition precedente (ici,
on multiplie les frequences par 2) : le codage dun symbole de la source
de depart sera obtenu par concatenation des lettres attribuees a` ce symbole
lors de la procedure.
Exemple 3.6 Prenons S = {s1 , . . . , s8 } avec la distribution des frequences :
1
4

f (s1 ) =

f (s2 ) = . . . = f (s6 ) =
f (s7 ) = f (s8 ) =

1
8

1
16

Ceci donne lieu a` la construction suivante :


symboles
frequences
lettres
frequences
lettres
frequences
lettres
frequences
lettres
frequences
lettres
codages

s1

s2

s3

s4

s5

s6

s7

s8

1
4

1
8

1
8

1
8

1
8

1
8

1
16

1
16

1
2

1
4

1
4

1
4

1
4

1
4

1
8

1
8

0
1

1
2

1
2

1
2

1
2

1
2

1
4

1
4

0
1

1
1

0
1

1
1

0
1

1
2

1
2

0
1

1
1

00 010 011 100 101 110 1110 1111

37

III. CODAGE OPTIMAL : CONSTRUCTIONS

Un codage construit par la methode de Fano est optimal si les frequences sont de
la forme 21k .
On peut remarquer que cette technique peut e galement sappliquer meme lorsque
les frequences ne sont pas de la forme 21k ; on separe alors les symboles en deux ensembles les plus equitables possible (pour ce qui est des frequences). Le codage
obtenu nest alors pas forcement optimal.

3)

Cas general : codage de Huffman


Il sagit de la generalisation du principe de Fano, et sappuie sur le resultat suivant :

Proposition 3.6 Soit une source S = {s1 , . . . , sN } munie de la distribution des frequences
f ; on suppose que les symboles sont ordonnes de la mani`ere suivante : f (s1 ) . . .
f (sN ) ; soit une deuxi`eme source
S 0 = S \ {sN 1 , sN } {sN 1,N }
munie de la distribution des frequences donnee par

f 0 (s)
= f (s)
0
f (sN 1,N ) = f (sN 1 ) + f (sN )

si s 6= sN 1,N

Alors, si C 0 est un codage binaire optimal pour S 0 , le code C defini par :

C : S {0,
1}
= C 0 (s)
C(s)
C(sN 1 ) = C 0 (sN 1,N ) 0
s 7

C(sN )
= C 0 (sN 1,N ) 1

si s 6= sN 1 , sN

est un codage optimal pour la source S.

Lidee proposee par Huffman est donc de tirer parti de cette propriete et de construire
un codage optimal en considerant les deux symboles de plus basse frequence de S, en
leur attribuant a` chacun les lettres 0 et 1, puis en considerant ces symboles comme un
seul symbole de la source S 0 . On recommence en considerant S 0 comme la nouvelle
source S. Cette construction peut se faire sous forme darbre (voir les transparents du
cours) ou de tableau (voir lexemple page suivante).
Proposition 3.7 Un code obtenu par la methode de Huffman est optimal.
On dispose ainsi dune technique permettant de construire, pour toute source (S, f ),
un codage optimal. On peut donc e noncer le resultat suivant :
Theor`eme 3.1 Pour toute source S et distribution f il existe un codage optimal.

38

CHAPITRE 3. CODAGE OPTIMAL

Exemple 3.7 Soit la source


s
s1
s2
s3
s4 s5
s6
s7
s8
f (s) 0, 4 0, 15 0, 15 0, 1 0, 1 0, 06 0, 02 0, 02
La construction dun codage de Huffman pour cette source est :
symboles
frequences
lettres
symboles
frequences
lettres
symboles
frequences
lettres
symboles
frequences
lettres
symboles
frequences
lettres
symboles
frequences
lettres
symboles
frequences
lettres

s1
0, 4

s2
0, 15

s1
0, 4

s2
0, 15

s1
0, 4

s2
0, 15

s1
0, 4

s5678
0, 2

s1
0, 4

s34
0, 25

s1
0, 4

s25678
0, 35
0
s1
0, 4
1

s2345678
0, 6
0

s3
0, 15

s4
0, 1

s5
s6
s7
s8
0, 1 0, 06 0, 02 0, 02
0
1
s3
s4
s5
s6
s78
0, 15 0, 1 0, 1 0, 06 0, 04
0
1
s3
s4
s5 s678
0, 15 0, 1 0, 1 0, 1
0
1
s2
s3
s4
0, 15 0, 15 0, 1
0
1
s5678 s2
0, 2 0, 15
0
1
s34
0, 25
1

Il suffit ensuite de reconstruire les mots de code :


symboles
codages
symboles
codages
symboles
codages
symboles
codages
symboles
codages
symboles
codages
symboles
codages

s2345678
s1
0
1
s1
s25678 s34
1
00
01
s1
s34 s5678 s2
1
01
000 0001
s1
s5678
s2
s3
s4
1
000 001 010 011
s1
s2
s3
s4
s5
s678
1
001 010 011 0000 0001
s1
s2
s3
s4
s5
s6
s78
1
001 010 011 0000 00010 00011
s1
s2
s3
s4
s5
s6
s7
s8
1
001 010 011 0000 00010 000110 000111

39

IV. NOTION DENTROPIE

IV Notion dentropie
Les resultats presentes ci-dessus restent cibles (alphabet binaire, . . .). Il est neanmoins
interessant de comprendre sur quel concepts ils reposent. La theorie de linformation,
qui a pour objet detudier le codage de linformation en toute generalite (tout type
dinformation, mais aussi tout type dutilisation de cette information : stockage, transmission . . .) a e te fondee par Claude Shannon en 1948. Elle repose sur la theorie des
probabilites. Sans rentrer dans les details mathematiques de cette theorie, il est important de degager les idees matresses de Shannon.

1) Quantite dinformation
Si un matin, en prenant votre petit dejeuner, vous lisez dans le journal : le soleil
se couchera ce soir, vous napprendrez pas grand chose. En revanche, si vous lisez :
il fera nuit ce midi, vous aurez appris quelque chose. La quantite dinformation est
nulle dans le premier cas, elle est tr`es grande dans le second.
Intuitivement une information est dautant plus importante quelle rev`ele quelque
chose dexceptionnel, cest`adire de peu frequent.
Cest cela (plus dautres arguments que nous ne developperons pas) qui a conduit
Claude Shannon a` poser la definition suivante :
Definition 3.4 Soit une source S avec une distribution de frequences f . On appelle
quantite dinformation du symbole x S le nombre :
I(x) = log2

1
= log2 f (x)
f (x)

Une quantite dinformation se mesure en bits.


On voit que cette definition refl`ete bien notre intuition : I(x) est un nombre positif
dautant plus grand que f (x) est petit. Dans les cas extremes on a :
I(x) = 0 si f (x) = 1, cest`adire si le symbole x apparat dans 100 % des cas,
limf (x)0 (x) = +, cest`adire si le symbole x napparat presque jamais.
Exemple 3.8 Reprenons la source du dernier exemple :
x
s1
s2
s3
s4
s5
s6
s7
s8
f (x) 0, 4 0, 15 0, 15 0, 1 0, 1 0, 06 0, 02 0, 02
I(x) 1, 32 2, 74 2, 74 3, 32 3, 32 4, 06 5, 64 5, 64

2) Entropie dune source


Cest la quantite dinformation moyenne par symbole dune source.

40

CHAPITRE 3. CODAGE OPTIMAL

Definition 3.5 On appelle entropie de la source S avec la distribution des frequences


f la quantite moyenne dinformation par symbole :
X
X
H(S, f ) =
f (x) I(x) =
f (x) log2 (f (x))
xS

xS

Exemple 3.9 Reprenons la source du dernier exemple :


x
s1
s2
s3
s4 s5
s6
s7
s8
f (x) 0, 4 0, 15 0, 15 0, 1 0, 1 0, 06 0, 02 0, 02
H(S, f ) = 0, 4 1, 32 + 0, 15 2, 74 + 0, 15 2, 74 + 0, 1 3, 32
+0, 1 3, 32 + 0, 06 4, 06 + 0, 02 5, 64 + 0, 02 5, 64
= 2, 48
Lemme 3.1 Soit {f1 , f2 , . . . , fN } une distribution de frequences et soit R = {r1 , r2 , . . . , rN }
un ensemble de N reels positifs non nuls dont la somme est inferieure ou e gale a` 1.
On a alors linegalite :
H(S, f ) =

N
X
i=1

X
1
1
fi log2
fi log2
fi
ri
i=1

legalite ayant lieu lorsqu fi = ri pour tout i.

preuve : laissee en exercice

Proposition 3.8 Pour toute source S ayant N symboles, et toute distribution de frequences
f , on a
0 H(S, f ) log2 N
Legalite H(S, f ) = 0 nayant lieu que si S contient un symbole de frequence 1, et
legalite H(S, f ) = log2 N nayant lieu que si la distribution f est uniforme.
preuve : Linegalite 0 H(S, f ) est immediate.
Lautre decoule du lemme precedent avec en prenant ri = 1/N pour tout i.

3) Theor`eme du codage sans bruit


Il existe une relation entre la longueur moyenne dun codage dune source S et
lentropie de cette source. Le theor`eme du codage sans bruit de Shannon e tablit cette
relation :
Theor`eme 3.2 (Shannon) Soit une source S de distribution f , et un codage binaire
C defini sur cette source. Alors on a :
H(S, f ) nC .

41

IV. NOTION DENTROPIE

preuve : Soit C un codage (decodable) de S, et soient l1 , l2 , . . . , lN les longueurs des


mots du code resultant representant les symboles x1 , x2 , . . . , xN de la source. On pose,
pour tout i, ri = 21li .
Dapr`es linegalite de Kraft on a
N
X

ri 1

i=1

et on peut alors appliquer le lemme precedent :


H(S, f )

N
X
i=1

fi log2

1
ri

Compte tenu de la definition des ri , la somme du membre droit de cette inegalite vaut :
N
X

li

f (xi ) log2 2 =

i=1

Le theor`eme est ainsi demontre.

N
X
i=1

f (xi ) li log2 2 =

N
X

f (xi ) li = nC

i=1

Corollaire 3.2 La longueur moyenne dun codage binaire optimal ne peut pas e tre
inferieure a` lentropie de la source.
Proposition 3.9 Soit une source S de distribution f . Il existe un codage binaire prefixe
C tel que :
H(S, f ) nC < H(S, f ) + 1.
La theorie de linformation permet detudier divers types de sources : independantes
(comme ici : chaque symbole est considere separement), markoviennes (on prend en
compte les suites de symboles qui sont tr`es frequentes, exploitant linformation mutuelle entre les symboles).

42

CHAPITRE 3. CODAGE OPTIMAL

Chapitre 4
Codes correcteurs
Nous nous interesserons dans ce chapitre aux erreurs qui peuvent survenir lors
du stockage ou de la transmission des donnees. Nous nous placerons uniquemement
dans le contexte binaire : A = {0, 1}. Nous aborderons leur detection ainsi que leur
e ventuelle correction.

Contexte et motivations

Les donnees peuvent e tre alterees lors de leur stockage (influence des champs
e lectromagnetiques sur les disques durs, CD raye, . . .) ou de leur transmission (telephone,
television, reseau, satellites, . . .). On represente ces perturbations de la mani`ere suivante :
PP

AA
information
- information - decodage - donnees
source - codage - transmise -@
recue
@
@ CANAL @



P
XXX
P

De telles erreurs arrivent tr`es frequemment, et il est essentiel de pouvoir les detecter
et dessayer de les corriger. Lors de la relecteur ou de la reception de donnees, plusieurs
cas de figure peuvent se presenter :
1. les donnees sont indecodables : il y a clairement un probl`eme ;
2. les donnees sont decodables, mais on se rend compte quil y a eu un probl`eme :
il sagit par exemple dun texte et on voit que certaines lettres sont incoherentes ;
3. tout a lair normal : on decode correctement et les donnees obtenues ont un sens :
on ne sait pas sil y a eu des erreurs ou non (une erreur peut passer inapercue, par
exemple lorsquun nombre est remplace par un autre dans une somme a` payer).
Dans tous ces cas, il faut pouvoir decider o`u se situent les e ventuelles erreurs, pour
pouvoir rectifier les donnees.
43

44

CHAPITRE 4. CODES CORRECTEURS

II

Le mod`ele
La situation se modelise plus precisement de la mani`ere suivante :

source

utilisation 
des donnees

Q
A Q
........................................................... ...........................................................
A Q
..
.. ..
..

A
Q
..
.. ..
..

Q
..
..
.. ..
Q
A

codage
codage
.... .... - 


..
.
.
.
de source
de canal
.. ..
..

..

.. ..
..
..


.
.
.
..
.. ..
..

@
..
.. ..
..
canal
@

..
.. ..
..
..
.. ..
..

@
..
.. ..
..
@

..
.. ..
..


..
.. ..
..

..
.
.
.
decodage . .
decodage .

..
.. ..
..

de source
de canal
..
.. ..
..
 HHH
..
.. ..
..


H
..
. .
.
......................................................... ..........................................................
optimisation
detection et
de lespace
correction des erreurs

Les donnees sont traitees en deux temps :


1. codage/decodage de source : on sattache a` traduire le document source sous
forme binaire ; cest l`a quon essaie de minimiser lespace occupe par les donnees
en binaire (codages optimaux) ;
2. codage/decodage de canal : on sattache a` la detection et a` la correction des
erreurs (codes correcteurs : on rajoute lors du codage une information pertinente
qui sera exploitee lors du decodage).
Le canal est une estimation mathematique (probabiliste) des conditions reelles de
stockage ou de transmission. C. Shannon a propose differents types de canaux, permettant dapprocher les situations concr`etes. Nous netudierons ici que le plus simple : le
canal binaire symetrique sans memoire.
Definition 4.1 Le canal binaire symetrique sans memoire est un canal dans lequel
chaque bit est transmis independamment des autres, et a une probabilite p detre modifie lors de la transmission :

1p

*



HH

p HH
HH p

HH

H
j
H

HH

1p

`
II. LE MODELE

45

Rappelons quune mesure de probabilite sur X est une application de la forme


P : X [0, 1] R
x 7 P (x)
avec la propriete que
X

P (x) = 1 .

xX

Dans le contexte des probabilites, X designe lensemble de tous les e venements


qui peuvent se produire, et x X designe donc un e v
enement. Par extension, si A
P
designe un ensemble devenements, on definit P (A) = xA P (x).
Une des proprietes de base est que si A et B sont deux ensembles devenements,
on a P (AB) = P (A)+P (B)P (AB) ; si A et B sont incompatibles (AB = ),
alors on a P (A B) = P (A) + P (B) ; ainsi, si A et B sont incompatibles et tels que
A B = X , alors P (A) + P (B) = 1.
Ici, a` lechelle de la transmission dun bit, on a X = {0 0, 1 1, 0 1, 1
0} ; considerons deux ensembles devenements : A = {0 0, 1 1} (le bit est correctement transmis), et B = {0 1, 1 0} (le bit est mal transmis). Ces ensembles
sont bien disjoint, et leur union correspond bien a` toutes les situations possibles. Ainsi,
P ( le bit est correctement tranmis ) + P ( le bit est mal transmis ) = 1.
On appelle communement p la probabilite quil y ait une erreur lors de la transmission du bit ; la probabilite que la transmission se passe bien est donc 1 p.
On peut, a` partir de cette donnee de base, calculer les probabilites de bonne ou de
mauvaise transmission dune suite de bits. Ce calcul est simplifie ici car on a suppose
que la transmission des bits e tait independante (canal sans memoire) : il suffit alors
de multiplier les probabilites concernant chacun des bits pour obtenir le resultat sur la
suite enti`ere.
Exemple 4.1 Prenons une suite de deux bits. On a :
la probabilite que les deux bits soient mal transmis est : P1 = p2 ;
la probabilite que les deux bits soient bien transmis est : P2 = (1 p)2 ;
la probabilite que le premier soit bien transmis et que le deuxi`eme soit mal
transmis est : P3 = (1 p)p ;
la probabilite que le premier soit mal transmis et que le deuxi`eme soit bien
transmis est : P4 = p(1 p) ;
la probabilite quil y ait exactement une erreur est la somme des probabilites de
tous les cas o`u il y a une seule erreur : P3 + P4 = 2p(1 p) ;
la probabilite quil y ait au moins une erreur lors de la transmission est : 1
P2 = 1 (1 p)2 ; on peut e galement la calculer de la mani`ere suivante :
P1 +P3 +P4 (on somme, pour chaque nombre derreurs possible, les probabilites
qui les concernent).

46

CHAPITRE 4. CODES CORRECTEURS

Exemple 4.2 Prenons p = 103 = 0, 001, et considerons la transmission de 3 bits


dans le canal. Supposons que la suite a` transmettre est 001. On a alors :
la probabilite que la suite recue soit 001 est (1 p)3 = (0, 999)3 = 0, 997 ;
la probabilite que la suite recue soit 011 est : (1 p)p(1 p) = (0, 999)2
103 = 0, 998 103 ;
la probabilite que la suite recue soit 010 est : (1 p)p2 = 0, 999 106 ;
la probabilite quil y ait au moins une erreur lors de la transmission est : 1
(1 p)3 = 0, 003.
Proposition 4.1 On transmet une suite de N bits sur un canal binaire symetrique sans
memoire.
Soient r bits choisis parmi les N bits recus. La probabilite que ces r bits soient
errones et que les autres aient e te bien transmis est
pr (1 p)N r
La probabilite que parmi les N bits recus il y ait exactment r bits errones est
CNr pr (1 p)N r
preuve : Le premier resultat est e vident : on sait quels sont les bits bien ou mal
transmis, et on multiplie les probabilites correspondantes. Pour le deuxi`eme resultat, il
faut prendre en compte les CNr choix possibles des positions des r bits errones.

III

Detection et correction des erreurs : principes

La personne qui recoit les donnees observe un train binaire, autrement dit une
suite de bits. Elle doit pouvoir la decouper en mots puis essayer de voir si ces mots
sont valides, cest-`a-dire si ce sont des mots du code. Ainsi lutilisation des codes
de longueur variable est tr`es hasardeuse, puisquune erreur dans le train binaire peut
totalement desynchroniser le decoupage en mots.
Exemple 4.3 Considerons par exemple le code de Huffman defini pour le codage des
textes en francais (exemple 3.2 du chapitre precedent). On code le message CETTE :
0100111001100110110
Lors de la transmission, une erreur se produit au 4`eme bit ; le destinateur recoit :
0101111001100110110
et lors du decodage il obtient R UUT, ce qui est tr`es different du message de depart.
On peut remarquer quil se rendra peut-etre compte quil y a un probl`eme car ce
message na pas de sens, mais il peut se produire des cas o`u le message concerve un
sens, qui nest pas le bon (par exemple si les donnees sont numeriques).


III. DETECTION
ET CORRECTION DES ERREURS : PRINCIPES

47

Ainsi, on utilise plutot des codes de longueur fixe car ils nous assurent un bon
decoupage. Il reste ensuite le probl`eme de la detection et de la correction des erreurs,
mais on pourra traiter chacun des mots separement.
On supposera dans la suite que me message a` coder est binaire (cest souvent dans
la pratique le resultat dun codage de Huffman binaire de la source) et on considerera
uniquement les codages binaires de longueur fixe, e galement connus sous le nom de
codes en blocs.
La procedure de codage est :
1. on decoupe le message en blocs de k bits ;
2. chacun des blocs de k bits est code separement en un bloc de n bits ;
3. on concat`ene les blocs de n bits ainsi obtenus pour former le message qui sera
transmis.
Et la procedure de decodage :
1. on decoupe le message recu en blocs de n bits ;
2. pour chacun de ces blocs de n bits, on cherche le mot du code le plus proche
(cette notion est developpee plus loin), et on extrait les k bits dinformation (on
retrouve le bloc de k bits qui est lantecedent du mot de code en question) ;
3. on concat`ene les blocs de k bits ainsi obtenus pour reconstituer le message.
Definition 4.2 Un code en blocs binaire de longueur n transforme chacun des 2k blocs
de k bits en des blocs de n bits. La quantite k designe le nombre de bits dinformation, et n k correspond a` la redondance ajoutee. Le rendement du code, ou taux
dinformation est donne par le quotient k/n.
Exemple 4.4 Si on code 1000 bits avec un code dont les param`etres sont k = 5 et
n = 8, la taille du message transmis sera 1000 8/5 = 1600.
Voici maintenant quelques exemples e lementaires de codes en blocs :
Exemple 4.5 (le bit de parite) Le principe en est tr`es simple : on rajoute a` chaque
bloc de taille k un bit, dit de parite, de sorte que sur le nouveau bloc (de taille k + 1)
le nombre de 1 est pair.
Considerons par exemple k = 4. Lensemble des mots de k bits est
0000
0100
1000
1100

0001
0101
1001
1101

0010
0110
1010
1110

0011
0111
1011
1111

A chacun dentre eux on associe un mot de code de k + 1 = 5 bits ; ces mots sont :
0000 0
0100 1
1000 1
1100 0

0001 1
0101 0
1001 0
1101 1

0010 1
0110 0
1010 0
1110 1

0011 0
0111 1
1011 1
1111 0

48

CHAPITRE 4. CODES CORRECTEURS

Donc, si le message de depart est 0010101101010001, on le decoupe en blocs de 4 bits


et on code chacun de ces blocs :
0010 1011 0101 0001

00101 10111 01010 00011


Le message transmis est donc 00101101110101000011.
Ce code permet de detecter un nombre impair derreurs dans un bloc, mais pas un
nombre pair. Et il ne permet en aucun cas de corriger ces erreurs.
Exemple 4.6 (le code a` repetitions) Un dernier exemple simple est le code a` repetitions :
il consiste en la repetition de chaque bit n fois. Ainsi ses param`etres sont k = 1 et n
(n est independant de k). Prenons par exemple n = 4 : le bit 0 est code par 0000 et le
bit 1 par 1111. Donc, si le message de depart est 0010101101010001, on le decoupe
en bits et on code chacun de ces bits separement :
0
0
1
0
1
0
1
1
0
1
0
1
0
0
0
1

0000 0000 1111 0000 1111 0000 1111 1111 0000 1111 0000 1111 0000 0000 0000 1111
Le message transmis est donc constitue de 4 16 = 64 bits :
0000000011110000111100001111111100001111000011110000000000001111.
Ce type de codage permet de detecter et de corriger, pour chaque bloc de n bits
erreurs si n est impair, et n2
si n est pair ; au-del`a, et jusqu`a n 1
jusqu`a n1
2
2
erreurs par blocs, on va detecter les erreurs, mais on ne les corrigera pas.

IV

Metrique de Hamming

Lensemble des objets manipules ici et dans la suite est constitue des mots binaires de longueur n, et doperations definies sur ces mots : distance, addition, . . .En
mathematiques, la rigueur necessite de definir proprement ceci, selon des notions
algebriques de groupes, anneaux, corps, espaces vectoriels1 . On ninsistera pas ici sur
ces notions, et on introduira seulement les operations et proprietes utilisees dans la
suite.
Lidee principale de la correction des erreurs est, pour chaque bloc de n bits du
message recu, de retrouver le mot de code qui en est le plus proche. Reste a` definir
cette notion de proche. On utilisera ici une distance, introduite par Hamming :
1

pour chaque ensemble dobjets, on peut definir des operations ; ce sont les proprietes verifiees par
ces operations qui engendrent ces structures ; a` titre dexemples, Z muni de laddition standard des
entiers est un groupe, Z muni des addition et multiplication standard sur les entiers est un anneau, R
muni des addition et multiplication standard est un corps, Rn est un espace vectoriel


IV. METRIQUE
DE HAMMING

49

Definition 4.3 La distance de Hamming entre deux mots binaires de longueur n est le
nombre de composantes pour lesquelles ces mots diff`erent :
u, v {0, 1}n , d(u, v) = Card({i, ui 6= vi })
Exemple 4.7 Soit n = 5 ; d(01001, 01011) = 1, d(01111, 01001) = 2.
Notons que toute application de la forme d : {0, 1}n {0, 1}n R nest pas
necessairement une distance ; elle doit verifier un certain nombre de proprietes :
pour tout u, v {0, 1}n , d(u, v) = 0 u = v ;
pour tous u, v {0, 1}n , d(u, v) = d(v, u) ;
inegalite triangulaire : pour tous u, v, w {0, 1}n , d(u, v) d(u, w) + d(v, w).
Lapplication definie plus haut satisfait ces conditions et peut, a` juste titre, e tre appelee
distance. Elle definit une metrique sur lensemble des mots binaires de longueur n.
Definition 4.4 Soit C un code de longueur n, et u {0, 1}n . On definit la distance de
u a` C comme la plus petite distance entre u et un mot de C :
d(u, C) = min d(u, v)
vC

Definition 4.5 Soit u {0, 1}n , la boule de centre u et rayon r designe lensemble
des mots binaires qui sont a` une distance au plus r de u :
B(u, r) = {v {0, 1}n , d(u, v) r}.
Exemple 4.8 Soit n = 4 ; on a :
B(1001, 0)
B(1001, 1)
B(1001, 2)
B(1001, 3)
B(1001, 4)

=
=
=
=
=

{1001}
B(1001, 0) {0001, 1101, 1011, 1000}
B(1001, 1) {0101, 1111, 1010, 0000, 0011, 1100}
B(1001, 2) {0111, 1110, 0010, 0100}
B(1001, 3) {0110} = {0, 1}4

Definition 4.6 On definit laddition de deux bits de la mani`ere suivante :


00
11
10
01

=
=
=
=

0
0
1
1

Elle correspond a` loperation logique connue sous le nom de ou exculsif (XOR en


anglais).

50

CHAPITRE 4. CODES CORRECTEURS

Cette operation verifie les proprietes suivantes2 :


commutativite : pour tous u, v {0, 1}, u v = v u ;
associativite : pour tous u, v, w {0, 1}, (u v) w = u (v w) ;
existence dun e lement neutre e tel que pour tout u {0, 1}, u e = e u = u ;
cet e lement est 0 ;
opposes : tout u {0, 1} admet un oppose note en general u (qui appartient a`
{0, 1}) tel que u (u) = (u) u = e = 0 ; on remarquera ici que loppose
de u est u lui-meme.
La definition dune operation daddition implique implicitement celle dune soustraction : on definit u v comme u (v) ; pour laddition definie ici, on obtient
u v = u v. Ainsi, soustraire deux bits revient a` les additionner.
Definition 4.7 Laddition de deux mots binaires de longueur n est le mot binaire de
longueur n resultant de leur addition bit-`a-bit. Soient u, v {0, 1}n ; on a :
w = u v wi = ui vi

i = 1, . . . , n

Ainsi, u v poss`ede des 1 l`a o`u u et v diff`erent, et des 0 l`a o`u u et v concident.
Les remarques concernant laddition de deux bits setendent a` laddition de deux
mots binaires :
commutativite : pour tous u, v {0, 1}n , u v = v u ;
associativite : pour tous u, v, w {0, 1}n , (u v) w = u (v w) ;
existence dun e lement neutre e tel que pour tout u {0, 1}n , ue = eu = u ;
cet e lement est 0000 . . . 000 ; on le notera 0 ;
opposes : tout u {0, 1}n admet un oppose, lui-meme : u u = 0.
Il en decoule que, pour tous u, v, w {0, 1}n ,
u v = w u w = v v w = u
Definition 4.8 Soit u {0, 1}n ; on appelle poids de u le nombre de ses composantes
non nulles :
wt(u) = d(u, 0).
Cette notion peut, comme les precedentes, e tre definie pour tout alphabet ; dans le
cas binaire, le poids dun mot est le nombre de 1 dans ce mot. On a de plus la
propriete suivante :
u, v {0, 1}n ,

wt(u v) = d(u, v).

Ceci implique notamment que


u, v, w {0, 1}n ,

d(u w, v w) = d(u, v).

On peut maintenant preciser ce que lon entend par erreur lors de la transmission
dun mot u : on dira que u a subi des erreurs si le mot recu v est different de u. Cette
difference peut e tre exprimee comme un mot non nul e tel que v = u e ; wt(e) = t
designe le nombre derreurs. Supposons maintenant que u est un mot dun code C, le
mot v se trouve alors a` une distance inferieure ou e gale a` t de C.
2

{0, 1} muni de cette addition est un groupe

V. DETECTION
ET CORRECTION DES ERREURS : RESULTATS

51

V Detection et correction des erreurs : resultats


Un param`etre essentiel de la detection et de la correction des erreurs est le suivant :
Definition 4.9 Soit C un code. Sa distance minimale est donnee par :
d =

min

d(u, v)

u, v C
u 6= v

min
u, v C
u 6= v

wt(u v)

Definition 4.10 Soit C un code de longueur n, et soit v {0, 1}n ; on dit que C
detecte v si v 6 C. C est dit t-detecteur sil peut detecter tous les mots comportant de
1 a` t erreurs, cest-`a-dire tous les mots situes a` une distance non nulle inferieure ou
e gale a` t de C.
Proposition 4.2 Pour quun code de distance minimale d soit t-detecteur, il faut et il
suffit que d > t.
preuve : Un code C est t-detecteur si et seulement si pour tout mot u C aucune
des versions erronees de u, situee a` une distance au plus t de C, nest un mot de C,
autrement dit si et seulement si
u C,

B(u, t) C = {u}.

Ainsi, si on consid`ere toutes les boules de rayon t centrees en les mots de C, chacune ne
contient quun seul mot de C, son centre (dautres mots peuvent appartenir a` plusieurs
boules, mais ce ne seront pas des mots de C).
Soit C un code t-detecteur ; si u et v sont des mots de C tels que d(u, v) = d, ces
deux mots ne peuvent appartenir a` une meme boule : d(u, v) > t : on a donc d > t.
La reciproque est e vidente : si u et v sont des mots de C tels que d(u, v) = d, et
si d > t, alors d(u, v) > t. Comme pour tous les autres couples (u0 , v 0 ) de mots de
C, d(u0 , v 0 ) d(u, v), on a d(u0 , v 0 ) > t et les boules centrees en les mots de C ne
contiennent chacune quun seul mot de C : C est bien t-detecteur.

Definition 4.11 Soit C un code de longueur n, u C, e un mot de poids t tel que


v = u e 6 C. On dit que C corrige v si
1. il nexiste pas de mot du code dont la distance a` v soit strictement inferieure a`
t;
2. u est le seul mot du code a` distance t de v.
En dautres ternes, la boule B(v, t) ne contient quun seul mot du code : u.

52

CHAPITRE 4. CODES CORRECTEURS

Definition 4.12 Un code est dit t-correcteur sil peut corriger tous les mots ayant subi
de 1 a` t erreurs, cest-`a-dire tous les mots situes a` une distance non nulle inferieure ou
e gale a` t de C.
On peut remarquer que pour quun code soit t-correcteur, il est necessaire quil soit
t-detecteur, et donc que sa distance minimale soit superieure a` t.
Proposition 4.3 Soit C un code t-correcteur. Alors toutes les boules de rayon t, centrees
en les mots de C sont disjointes.
preuve : On va montrer que si deux boules de rayon t, centrees en deux mots distincts
u1 et u2 de C, ne sont pas disjointes, alors C nest pas t-correcteur.
#
#

u
u
1
2
"!
"!
Appelons d la distance separant u1 de u2 : d = d(u1 , u2 ). Remarquons quen vertu
de linegalite triangulaire, d 2t, et que compte tenu de la remarque ci-dessus, on
peut supposer d > t.
Il existe une suite de mots v1 = u1 , v2 , v3 , . . . , vd+1 = u2 tels que la distance de
d(vi , vi+1 ) = 1 (comme il y a d + 1 mots, cela signifie que d(vi , u1 ) + d(vi , u2 ) = d).
Le mot vt se trouve a` une distance t de u1 , et a` une distance d t de u2 .
On distingue deux cas :
si d < 2t, alors d t < t et vt est plus proche de u2 que de u1 ;
si d = 2t, alros d t = t et vt est a` e gale distance de u1 et u2 . On distingue deux
cas :
soit u1 et u2 sont les mots du code les plus proches de vt ;
soit il existe un mot du code plus proche encore de vt .
Dans tous ces cas, C ne peut pas corriger vt . C nest donc pas t-correcteur.

La reciproque est vraie :


Proposition 4.4 Soit C un code. Alors si toutes les boules de rayon t, centrees en les
mots de C sont disjointes, C est t-correcteur.
preuve : laissee en exercice.

Corollaire 4.1 Pour quun code de distance minimale d soit t-correcteur, il faut et il
suffit que d 2t + 1.
preuve : laissee en exercice.

Ainsi, si d est la distance minimale du code C, ce code sait detecter jusqu`a d 1


c erreurs.
erreurs et corriger jusqu`a b d1
2


VI. CODES LINEAIRES

53

VI Codes lineaires
Nous allons nous interesser ici a` une famille de codes : les codes lineaires (binaires).

1) Definition et premi`eres proprietes


Definition 4.13 Un code binaire C est dit lineaire si C 6= et que toute somme de
mots de C est encore un mot de C :
u, v C,

u v C.

Proposition 4.5 Soit C un code lineaire. Alors 0 C.


preuve : Soit u C ; comme C est lineaire, u u = 0 est aussi un mot de C.

Exemple 4.9 Les codes suivants sont lineaires : {0} (le mot 0 de longueur n : cest
le plus petit code lineaire de longueur n), {0, 1}n (lespace tout entier : cest le plus
grand code lineaire de longueur n), le code obtenu par ajout dun bit de parite est
lineaire, le code a` repetition, . . .
Proposition 4.6 Soit C un code lineaire. Sa distance minimale satisfait
d = min wt(u)
uC
u 6= 0

preuve : Soitent u, v C tels que d(u, v) = wt(u v) = d ; alors le mot z =


u v appartient a` C (linearite) et d = wt(z). De plus, tout autre mot z 0 de C est tel
que wt(z 0 ) wt(z) : en effet si il existait un z 0 tel que wt(z 0 ) < wt(z), alors cela
signifierait que d(z 0 , 0) < d(z, 0) = d ce qui est impossible (la distance minimale du
code est d, et ne peut donc pas lui e tre inferieure).

Definition 4.14 Soit C un code lineaire de longueur n, et u {0, 1}n . On appelle


translate de C engendre par u le code :
u C = {u v, v C}
Proposition 4.7 Soit C un code lineaire de longueur n, et u {0, 1}n . Alors (u
C) C est un code lineaire.
preuve : Soient v, w (u C) C ; on va montrer que v w (u C) C. Trois
cas se presentent :
si v, w C : la linearite de C permet de conclure que v w C ;

54

CHAPITRE 4. CODES CORRECTEURS


si v, w u C : on va montrer que v w C. Il existe v 0 , w0 C tels que
v = u v 0 et w = u w0 ; ainsi, v w = u v 0 u w0 = v 0 w0 . Or v 0
et w0 sont deux mots de C qui est un code lineaire ; on a donc v 0 w0 C, et
finalement v w C ;
si v C et w u C : soit w = u z, z C, alors on a v w = v u z =
u v z ; comme v, z C, on a v z C et donc v w u C.

Proposition 4.8 Soit C un code lineaire de longueur n, et u {0, 1}n . Alors u C et


C ont meme cardinal.
preuve : Considerons maintenant lapplication
fu : {0, 1}n {0, 1}n
v
7 v u
Cette application est injective (deux mots distincts ont des images distinctes), i.e.
v, w {0, 1}n , fu (v) = fu (w) = v = w
En effet, si on suppose que fu (v) = fu (w), alors on a u v = u w, et donc
u u v = w, ce qui donne v = w.
Ainsi, fu ({0, 1}n ) = {fu (v), v {0, 1}n } contient autant delements que {0, 1}n
et fu est bijective.
Donc, si C est un code de longueur n on a C {0, 1}n , et u C = fu (C) contient
autant delements que C.

Proposition 4.9 Soit C un code lineaire de longueur n, et u {0, 1}n . Alors on a :



u C = u C = C
u 6 C = (u C) C =
preuve : 1) soit u C : on va montrer que u C C. Soit v u C, v = u w
avec w C. Comme u et w sont deux mots de C et que C est lineaire, v = u w C.
Tout mot de u C appartient donc a` C et on a bien u C C. Comme on sait (par
la proposition precedente) que u C contient le meme nombre delements que C, on
a u C = C.
2) soit u 6 C ; raisonnons par labsurde et supposons que (u C) C 6= . Soit
w (u C) C ; il existe v C tel que w = u v et donc on a u = v w ; or
v, w C et donc on a u C, ce qui contredit lhypoth`ese de depart.

Remarque : on peut en deduire que si u 6 C, alors u C nest pas un code lineaire (il
ne contient pas le mot nul).


VI. CODES LINEAIRES

55

2) Constructions
Lelement de base de la construction dun code lineaire est laddition des mots.
Regardons sur quelques exemples ce que cela implique quant a` la representation du
code.
Exemple 4.10 Soit C = {0000, 0011, 0101, 1001, 0110, 1100, 1010, 1111} le code de
parite de longueur 4, qui est un code lineaire. On va le reconstruire petit a` petit, en
ajoutant un par un des mots et en completant par addition. Considerons lensemble
E = {}
On va reconstruire le code C a` partir de cet ensemble : prenons un mot de C qui nest
pas dans E, par exemple 0011, et rajoutons-le : E = {0011}. Comme on veut que E
soit un code lineaire, on rajoute automatiquement aussi les mots obtenus par addition ;
on a donc finalement :
E = {0000, 0011}
Prenons maintenant un autre mot de C qui nest pas dans E, par exemple 0101, et
rajoutons-le, ainsi que les mots obtenus par addition de 0101 avec les mots de E ; on
obtient :
E = {0000, 0011, 0101, 0110}
Prenons maintenant un autre mot de C qui nest pas dans E, par exemple 1100, et
rajoutons-le, ainsi que les mots obtenus par addition de 1100 avec les mots de E ; on
obtient :
E = {0000, 0011, 0101, 0110, 1100, 1111, 1001, 1010}
On a enti`erement reconstitue le code C en ajoutant 0011, 0101, 1100 et en completant
a` chaque par addition. Ceci signifie que le code paut e tre defini enti`erement par ces 3
mots-l`a.
Cet exemple nous montre quon peut essayer de repesenter un code lineaire par un
sous-ensemble de ses mots.
Definition 4.15 Soit C un code lineaire. On appelle partie generatrice de C tout ensemble de mots de C qui, lorsquon le compl`ete par addition, redonne le code tout
entier. On dit quelle est minimale si lorsauon lui enl`eve un e lement elle nest plus
generatrice du code.
Une premi`ere remarque simpose ici : tout code lineaire C poss`ede au moins une
partie generatrice, lui-meme. La question que lon peut alors se poser est : peut-on
trouver une partie generatrice plus petite ?

56

CHAPITRE 4. CODES CORRECTEURS

Exemple 4.11 Soit C = {0000, 0011, 0101, 1001, 0110, 1100, 1010, 1111} le code de
parite de longueur 4, qui est un code lineaire. Soit
E = {0000, 0011, 0101, 1001, 0110, 1100, 1010, 1111}
On va essayer de reduire E tout en conservant la propriete que les mots de E engendrent bien tout le code C. Commencons par enlever 0000, qui peut e tre obtenu
avec nimporter quel mot (en ladditionnant a` lui-meme) :
E = {0011, 0101, 1001, 0110, 1100, 1010, 1111}
Essayons maintenant de supprimer 1111 ; on obtient alors
E = {0011, 0101, 1001, 0110, 1100, 1010}
Cet ensemble engendre bien C, puisque 00111100 = 1111. On continue, et on enl`eve
1010 ; on obtient
E = {0011, 0101, 1001, 0110, 1100}
Cet ensemble engendre bien C, puisque 0110 1100 = 1010 et 0011 1100 = 1111.
On continue, et on enl`eve 1100 ; on obtient
E = {0011, 0101, 1001, 0110}
Cet ensemble engendre bien C, puique 0101 1001 = 1100, 0110 1100 = 1010 et
0011 1100 = 1111. On continue, et on enl`eve 0110 ; on obtient
E = {0011, 0101, 1001}
Cet ensemble engendre bien C, puisque 0011 0101 = 0110, 0101 1001 = 1100,
0110 1100 = 1010 et 0011 1100 = 1111. On continue, et on enl`eve 1001 ; on
obtient
E = {0011, 0101}
Cet ensemble engendre {0011, 0101, 0110, 0000} =
6 C. Donc on ne peut pas enlever
1001. On essaie alors denlever 0101 :
E = {0011, 1001}
Cet ensemble engendre {0011, 1001, 1010, 0000} =
6 C. Donc on ne peut pas enlever
0101. On essaie alors denlever 0011 :
E = {0101, 1001}
Cet ensemble engendre {0101, 1001, 1100, 0000} =
6 C. Donc on ne peut pas enlever
0011. On ne peut pas reduire
E = {0011, 0101, 1001}
On a trouve une partie de 3 mots qui engendre C.


VI. CODES LINEAIRES

57

Suite a` ces exemples, on peut se poser pluseurs questions :


Tout code lineaire admet-il une partie generatrice minimale ? La reponse
est oui, car le code possedant un nombre fini delements ; ce resultat sera aborde
dans le cours de mathematiques du second semestre (alg`ebre lineaire) ;
Une partie generatrice minimale est-elle unique ? La reponse st non : dans
les deux exemples precedents, on a trouve deux partie generatrices minimales
differentes pour le code de parite de longuer 4 ;
Les parties generatrices minimales ont-elles toutes le meme cardinal ? La
reponse est oui, et nous allons le demontrer maintenant.
Proposition 4.10 Soit C un code lineaire. Alors le nombre de mots quil contient est
de la forme 2k . Ceci signifie que ses parties generatrices minimales contiennent toutes
k mots.
preuve : On va construire le code C petit a` petit, en comptant, pour chaque mot rajoute
le nombre de mots engendres. On va proceder comme dans le premier exemple de ce
paragraphe : on definit deux ensembles E1 et E2 qui seront respectivement e gaux, au
debut a` {0} (le mot ne contenant que des 0) et C \ {0}.
Lors de la construction, E1 sera toujours un code lineaire ; on linitialise a` {0} qui
est le plus petit code lineaire possible.
On utilise une variable taille qui va mesurer le nombre delements de E1 ; au
debaut, taille = 1.
Tant que E2 6= , faire :
Etemp = u E1
(les mots obtenus par addition
de u)

choisir u E2

E1 = E1 Etemp

E2 = E2 \ Etemp

(proposition 4.6 : E1 de vient un


nouveau code lineaire : on a rajoute le generateur u)

(on enl`eve de E2 tous les mots


ajoutes a` E1 grace a` u)

taille = 2 taille
(voir les propositions 4.7 et 4.8)
Ce procede sarretera forcement puisque C ne contient quun nombre fini delements ;
ce nombre sera la valeur de taille a` la fin et sera bien de la forme 2k , o`u k sera le
nombre de mots u quon aura rajoutes.

Definition 4.16 Soit C un code lineaire contenant 2k mots. Le param`etre k, cardinal


de toute partie generatrice minimale, sappelle la dimension de C.

58

CHAPITRE 4. CODES CORRECTEURS

Table des mati`eres


Introduction

5
5
5
5
6
7
8
8

Representation des nombres


I
Quelques syst`emes de representation des entiers naturels . . . . . . .
II
Entiers naturels : bases de numeration . . . . . . . . . . . . . . . . .
1)
Syst`eme decimal . . . . . . . . . . . . . . . . . . . . . . . .
2)
Syst`eme de base b quelconque . . . . . . . . . . . . . . . . .
3)
Taille du codage des entiers en base b . . . . . . . . . . . . .
4)
Bases les plus utilisees en informatique . . . . . . . . . . . .
III Autres codages des entiers naturels . . . . . . . . . . . . . . . . . . .
1)
Decimal code binaire (calculatrices de poche) : BCD (Binary
Coded Decimal) . . . . . . . . . . . . . . . . . . . . . . . .
2)
Biquinaire (1956 sur IBM 605) . . . . . . . . . . . . . . . . .
IV Representation des autres nombres . . . . . . . . . . . . . . . . . . .
1)
Entiers relatifs (signes) . . . . . . . . . . . . . . . . . . . . .
2)
Nombres fractionnaires (reels) . . . . . . . . . . . . . . . . .

8
9
9
9
10

Codes, codages et decodages


I
Alphabets et mots . . . . . . . . . . . . . . . . . . .
1)
Alphabet . . . . . . . . . . . . . . . . . . .
2)
Mots . . . . . . . . . . . . . . . . . . . . .
3)
Longueur dun mot . . . . . . . . . . . . . .
4)
Ensembles de mots construits sur un alphabet
5)
Langages . . . . . . . . . . . . . . . . . . .
6)
Operation de concatenation . . . . . . . . . .
7)
Prefixe dun mot . . . . . . . . . . . . . . .
II
Codage . . . . . . . . . . . . . . . . . . . . . . . .
1)
Morphisme . . . . . . . . . . . . . . . . . .
2)
Codage . . . . . . . . . . . . . . . . . . . .
3)
Decodage . . . . . . . . . . . . . . . . . . .
III Cas particuliers de codes . . . . . . . . . . . . . . .
1)
Codes de longueur fixe . . . . . . . . . . . .
2)
Codes a` virgule . . . . . . . . . . . . . . .

13
14
14
14
15
15
16
16
16
17
17
18
19
19
19
19

59

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

`
TABLE DES MATIERES

60

IV

3)
Codes prefixes . . . . . . . . . . . . . . .
Algorithme de Sardinas-Patterson . . . . . . . . .
1)
Residuel . . . . . . . . . . . . . . . . . .
2)
Langage quotient . . . . . . . . . . . . . .
3)
Lalgorithme . . . . . . . . . . . . . . . .
Inegalite de Kraft . . . . . . . . . . . . . . . . . .
1)
Representation graphique dun code prefixe
2)
Inegalite de Kraft . . . . . . . . . . . . . .

Codage optimal
I
Longueur moyenne . . . . . . . . . . . . . . . .
II
Codage optimal : definitions et proprietes . . . .
III Codage optimal : constructions . . . . . . . . . .
1)
Cas de la distribution uniforme . . . . . .
2)
Cas dune distribution de la forme f (x) =
3)
Cas general : codage de Huffman . . . .
IV Notion dentropie . . . . . . . . . . . . . . . . .
1)
Quantite dinformation . . . . . . . . . .
2)
Entropie dune source . . . . . . . . . .
3)
Theor`eme du codage sans bruit . . . . . .
Codes correcteurs
I
Contexte et motivations . . . . . . . . . . . .
II
Le mod`ele . . . . . . . . . . . . . . . . . . .
III Detection et correction des erreurs : principes
IV Metrique de Hamming . . . . . . . . . . . .
V
Detection et correction des erreurs : resultats .
VI Codes lineaires . . . . . . . . . . . . . . . .
1)
Definition et premi`eres proprietes . .
2)
Constructions . . . . . . . . . . . . .

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.

1
2k

.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

20
21
21
22
22
24
24
25

.
.
.
.
.
.
.
.
.
.

29
29
32
35
35
35
37
39
39
39
40

.
.
.
.
.
.
.
.

43
43
44
46
48
51
53
53
55

S-ar putea să vă placă și