Académique Documents
Professionnel Documents
Culture Documents
1 Incertitude et Information 1
1.1 Entropie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.1.1 Choix et incertitude . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.1.2 Choix avec probabilité connue . . . . . . . . . . . . . . . . . . . . . . 9
1.1.3 Variables aléatoires . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
1.1.4 Entropie conditionnelle . . . . . . . . . . . . . . . . . . . . . . . . . . 18
1.2 L’information et sa mesure . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
1.2.1 Observations et événements . . . . . . . . . . . . . . . . . . . . . . . 28
1.2.2 Information mutuelle et divergence de Kullback-Leibler . . . . . . . . 34
1.2.3 Surprise, entropie et information . . . . . . . . . . . . . . . . . . . . . 42
2 Exercices du module C1 47
2.1 Entropie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
2.2 La mesure de l’information . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
4 Exercices du module C3 87
4.1 Chaînes de Markov de premier ordre . . . . . . . . . . . . . . . . . . . . . . . 87
i
ii TABLE DES MATIÈRES
13 Cryptographie 219
13.1 Cadre Général . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220
13.1.1 Buts de la Cryptographie . . . . . . . . . . . . . . . . . . . . . . . . . 220
13.1.2 Exemples Historiques . . . . . . . . . . . . . . . . . . . . . . . . . . 221
13.2 Confidentialité Parfaite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223
13.2.1 Définition et Conséquences . . . . . . . . . . . . . . . . . . . . . . . . 224
13.2.2 Un Exemple : le One-Time Pad . . . . . . . . . . . . . . . . . . . . . 225
iv TABLE DES MATIÈRES
v
vi TABLE DES MATIÈRES
Chapitre 1
Module C1 : Incertitude et
information
Introduction
Bienvenue dans cette première étape du monde de la théorie de l’information. De toute évi-
dence, dans un monde qui est en passe de devenir une société d’information, la notion et
le concept d’information devraient soulever une grande attention scientifique. En fait, bien
que le développement de l’information pragmatique, dans les ordinateurs, sur Internet et dans
d’autres réseaux informatiques, évolue à une allure extrêmement rapide, l’étude théorique et
conceptuelle de ce qu’est l’information et de la façon dont elle devrait être traitée ne suit pas
vraiment ce rythme frénétique.
La théorie de l’information, dans le sens technique qu’on lui donne aujourd’hui, remonte au
travail de Claude Shannon. Elle a été introduite comme moyen d’étudier et de résoudre les
problèmes de communication ou de transmission de signaux à travers des canaux. Bien que
ce soit une vision relativement étroite de l’information qui se penche plus particulièrement sur
la mesure du contenu de l’information, elle doit être incluse dans toute théorie – plus large –
de l’information. C’est pourquoi ce module est une introduction aux éléments de base de la
1
2 CHAPITRE 1. INCERTITUDE ET INFORMATION
1.1 Entropie
Toute situation d’incertitude peut être décrite comme une situation dans laquelle il existe plu-
sieurs possibilités, sans que l’on sache laquelle sera sélectionnée. Un exemple typique lié aux
1.1. ENTROPIE 3
ordinateurs est la question : « quelle sera la prochaine frappe de l’utilisateur ? » Selon le type
de clavier, il y aura plusieurs douzaines de possibilités, si les frappes combinées sont permises.
Une situation d’incertitude plus complexe naîtra si l’on considère une séquence complète de
frappes dans une session de dialogue. Il existe bien sûr un grand nombre de situations d’in-
certitude dans la vie courante, dans la recherche et le diagnostic médicaux, ainsi que dans
l’inférence statistique et les enquêtes criminelles, etc. L’étude de l’incertitude et la mesure
de sa quantité dans une situation donnée présentent donc un intérêt certain. La mesure de la
quantité d’incertitude est même une question fondamentale en communication et en théorie de
l’information.
Commençons par la description formelle d’une situation d’incertitude. Supposons qu’il existe
un cas dans lequel il se trouve une possibilité parmi m différentes possibilités. Nous dési-
gnons ces possibilités par e1 , e2 , . . . , em . Un tel ensemble de possibilités, désigné par S =
{e1 , e2 , . . . , em } est appelé un schéma de choix (fini). L’idée est que l’une de ces possibilités
est sélectionnée par une personne, un processus ou un mécanisme etc. L’incertitude survient
parce que nous ignorons laquelle des m possibilités est sélectionnée.
Comment mesurer la quantité d’incertitude dans un schéma de choix S? Intuitivement, plus la
cardinalité |S| de S (le nombre d’éléments de S) est grande, plus l’incertitude sera grande. Ceci
semble clair. Aussi, pourquoi ne pas simplement prendre |S| comme mesure de l’incertitude?
En effet, c’est une possibilité. Mais nous allons suivre une autre approche. Imaginons le jeu
suivant : je sélectionne une possibilité de S et vous pouvez me poser des questions sur mon
choix. Toutefois, je n’accepte que les questions auxquelles je peux répondre par «oui» ou par
«non». Dans tous les cas nous pouvons considérer que les possibilités sont représentées par les
nombres 1, 2, . . . , m = |S|. Aussi pourriez-vous poser des questions telles que: «le nombre
que vous avez sélectionné est-il impair?», «est-il inférieur à 10?», «supérieur à 13?», etc. Plus
vous aurez besoin de poser des questions, plus l’incertitude sera grande. Donc l’idée est de
mesurer l’incertitude par le nombre de questions que vous aurez besoin de poser pour trouver
mon choix.
Bien entendu, vous devrez poser des questions habiles. Si vous choisissez de demander si le
nombre est 1, si non, si c’est 2, etc., vous pourriez avoir besoin des m questions pour découvrir
mon choix. Il est clair que ceci n’est pas une méthode optimale. Cependant, si vous demandez
d’abord si le nombre est inférieur à m/2, ma réponse vous permettra de limiter la suite de votre
investigation à la moitié des possibilités initiales seulement. Ensuite vous pourriez procéder
d’une façon similaire. Ceci semble donc être une façon habile de découvrir mon choix.
Pour être un peu plus formels, considérons d’abord que m est une puissance de 2, m = 2n .
Puis nous pourrions diviser S par la première question (votre choix est-il supérieur à 2n−1 ?)
en deux moitiés de taille égale : {1, . . . , 2n−1 } et {2n−1 + 1, . . . , 2n }. Chaque moitié peut être
encore divisée en deux avec la deuxième question. Si la réponse à la première question est
«non», alors la deuxième question détermine soit {1, . . . , 2n−2 } soit {2n−2 + 1, . . . , 2n−1 }.
Si la réponse à la première question était «oui», alors la question suivante fait la distinction
entre {2n−1 + 1, . . . , 2n−1 + 2n−2 } ou {2n−1 + 2n−2 + 1, . . . , 2n }. Ce processus de questions
et réponses est représenté en figure 1.1. Chaque question est représentée par un nœud, en
commençant par la première question. Un nœud de questions est désigné par l’ensemble des
possibilités identifiées jusque-là. Le premier nœud est donc désigné par tout l’ensemble S;
les nœuds du premier niveau par les deux demi-ensembles; au second niveau par les quatre
quarts d’ensembles, etc. Chaque réponse possible est indiquée par un arc quittant le nœud.
Nous désignons une réponse «non» par un ’0’ et une réponse «oui» par un ’1’.
Le processus de division des ensembles de possibilités en moitiés égales prend fin avec la
découverte du choix exact après exactement n étapes. Le nombre n n’est rien d’autre que le
4
1.1. ENTROPIE 5
Exemple 1.1 (Echiquier) Prenons comme premier exemple celui d’un échiquier vide. Il
existe exactement m = 64 = 26 possibilités de placer une pièce dessus. Ainsi, le système de
choix peut être représenté par S = {1, 2, . . . , 64}, où chaque nombre représente une case de
l’échiquier. La quantité d’incertitude du placement d’une pièce sur un échiquier est
Comme toute définition, celle-ci est également arbitraire jusqu’à un certain degré. C’est fina-
lement son utilité et son élégance dans les applications qui la justifiera. Nous tenterons de le
faire dans la suite de ce module et dans d’autres.
On peut d’ailleurs également jouer aux questions-réponses avec des questions qui ont plus de
2 réponses possibles. Supposons que les questions ont k > 2 réponses possibles . Alors chaque
question permet de diviser l’ensemble de m possibilités en k sous-ensembles d’environ m/k
éléments. Donc, comme nous l’avons démontré plus haut, si |S| = k n , alors nous aurons
besoin d’exactement n = logk |S| questions. Cette fois nous utilisons le logarithme à base k.
Donc nous aurions pu définir
h(|S|) = logk |S|.
Mais nous avons
logk |S| = logk (2) · log2 |S|.
Changer la base du logarithme revient donc à changer d’unité de mesure, et ce n’est pas un
changement vraiment essentiel. Dorénavant, un log sans indication de la base a par défaut dans
ce chapitre, un logarithme en base 2.
Si nous avons un système de choix S et un arbre de questions correspondant, (comme en
figure 1.1), alors nous avons en même temps un codage des possibilités du système de choix.
En concaténant le “0” et le “1” sur le chemin de la racine à la possibilité en question, on
obtient un code de cette possibilité. Si nous utilisons des questions binaires, nous aurons un
code binaire pour le système de choix. Notez que la longueur du code de chaque possibilité
égale soit l’entier inférieur suivant, soit l’entier supérieur suivant de h(|S|) = log |S|. Ceci
est une première approche de la relation étroite entre l’incertitude et le codage. Ce point sera
étudié plus loin, dans le chapitre 5.
Exemple 1.2 (Arbre de questions binaires) Un système de choix est donné par S =
{1, 2, 3, 4, 5}. Sa quantité d’incertitude est
Un arbre de questions binaires correspondant possible est représenté en figure 1.3. On voit
aisément que le code 001 représente la possibilité {2} et que sa longueur 3 est l’entier suivant
supérieur de h(|S|). La possibilité {3} a comme longueur de code 2, {4} a comme longueur
2, etc.
6 CHAPITRE 1. INCERTITUDE ET INFORMATION
Voici maintenant quelques propriétés très simples de notre mesure de l’incertitude h(|S|) :
1. Si S1 et S2 sont deux systèmes de choix et |S1 | = |S2 |, alors h(|S1 |) = h(|S2 |). Seul le
nombre de possibilités importe dans un système de choix, et non leur nature.
2. Si S1 et S2 sont deux systèmes de choix et |S1 | < |S2 |, alors h(|S1 |) < h(|S2 |), puisque
le logarithme est une fonction croissante. C’est ce que nous attendons : l’incertitude
augmente avec le nombre de possibilités d’un choix.
3. Si S1 et S2 sont deux systèmes de choix et que S2 a le double des possibilités de S1
(|S2 | = 2 · |S1 |), alors, en utilisant le logarithme en base 2, nous obtenons h(|S2 |) =
h(|S1 |) + 1. Ceci découle de l’additivité du logarithme, et de log2 2 = 1,
h(|S2 |) = log2 |S2 | = log2 (2 · |S1 |) = log2 2 + log2 |S1 | = 1 + h(|S1 |).
4. Si S est un système de choix avec seulement deux possibilités, alors, avec la base 2 pour
le logarithme, h(|S|) = log2 2 = 1. Cette unité de mesure est appelée un bit (binary
information unit). Nous verrons que l’incertitude est étroitement liée à l’information, et
qu’on mesure cette dernière par les mêmes unités que l’incertitude. Nous pénètrerons
ainsi dans le royaume des ordinateurs. C’est pour cela que les questions binaires sont les
plus connues.
Si nous avons deux systèmes de choix S1 = {e1,1 , e1,2 , . . . , e1,n } et S2 = {e2,1 , e2,2 , . . . , e2,m },
alors les deux possibilités de choix correspondantes peuvent être assemblées en un système
combiné qui contient toutes les combinaisons n · m par paires de choix possibles :
Un tel ensemble de paires est appelé produit cartésien des deux ensembles individuels, et se
présente comme suit :
Bien entendu, ceci peut être généralisé et étendu à la combinaison de plus de deux choix
indépendants. Admettons que S1 , S2 , . . . , Sm soient m systèmes de choix. Alors le produit
cartésien des m-tuples
Corollaire 1.1
Exemple 1.4 (Dé) Lançons un dé m fois et considérons que les lancers sont indépendants.
Ceci peut être modelé par m systèmes de choix indépendants S1 , . . . , Sm , dans lesquels
chaque système contient 6 possibilités. D’après le corollaire 1.1, nous obtenons que
– Nous avons donné une forme précise à des situations d’incertitude par des systèmes de
choix S, dans lesquels une, parmi un nombre fini de possibilités, sera sélectionnée, sans
que l’on sache laquelle;
8 CHAPITRE 1. INCERTITUDE ET INFORMATION
– L’incertitude associée à un système de choix est mesurée par le (plus petit) nombre de
questions à poser pour découvrir le choix réel. Ceci mène à poser log |S| comme mesure
de l’incertitude. Avec des questions binaires l’unité de mesure est appelée un bit;
– Le jeu des questions définit un arbre qui peut être utilisé pour définir des codes pour les
possibilités du système de choix S. La longueur de ces codes est approximativement égale
à la mesure de l’incertitude log |S|. Si des questions binaires sont utilisées, nous obtenons
des codes binaires;
– Nous avons découvert que les incertitudes de systèmes de choix indépendants s’addi-
tionnent.
Évaluation 1
Évaluation 2
Si nous avons deux systèmes de choix S1 = {e1,1 , e1,2 , . . . , e1,n } et S2 = {e2,1 , e2,2 , . . . , e2,m },
alors le système de choix indépendants S1 × S2 a
1. n + m éléments;
2. n · m éléments.
Évaluation 3
Etant donné deux systèmes de choix S1 et S2 avec |S2 | = 2 · |S1 |, alors h(|S1 × S2 |) est égal à
1. h(|S1 |) + h(|S2 |);
2. 1 + 2 · h(|S1 |);
3. log(|S1 | · |S2 |);
4. h(|S1 |) · h(|S2 |);
1
5. 1 + 2 · h(|S2 |).
Évaluation 4
Retournons à la dernière control question. Laquelle des assertions correctes restera vraie, arbi-
trairement, pour S1 et S2 sans la propriété |S2 | = 2 · |S1 |.
1.1. ENTROPIE 9
Dans certaines situations, les probabilités des différentes possibilités qui pourraient se produire
sont connues. Par exemple, si l’on sait qu’une personne tape un texte en anglais, alors nous
savons que certaines lettres se présentent plus fréquemment que d’autres, et qu’elles sont donc
plus susceptibles d’être tapées. Ou, au niveau des mots, si l’on sait que l’utilisateur fait de
la programmation, alors nous savons que certains mots-clés tels que “si”, “alors”, “sinon”,
etc. sont plus susceptibles d’être tapés que la plupart des autres combinaisons de lettres. Nous
verrons dans cette section comment cette connaissance supplémentaire des probabilités affecte
la quantité d’incertitude dans un système de choix.
Pour commencer, nous introduisons formellement des probabilités dans un système de choix
S = {e1 , e2 , . . . , em } en assignant des probabilités pi aux possibilités ei pour i = 1, 2, . . . , m.
Ces probabilités doivent remplir les conditions suivantes :
m
X
0 ≤ pi ≤ 1, pour i = 1, 2, . . . m, pi = 1. (1.2)
i=1
La seconde condition exprime le fait qu’exactement une des m possibilités doit être sélectio-
née. Le système de choix S forme avec l’ensemble de probabilités P = {p1 , p2 , . . . , pm } un
système de choix probabiliste. Voici la définition formelle :
Quelle est la quantité d’incertitude dans un système de choix probabiliste ? Nous pourrions es-
sayer d’employer le même jeu de questions-réponses que dans la question précédente. Cepen-
dant, il n’est plus ingénieux de diviser l’ensemble de possibilités en sous-ensembles de taille
égale, parce que cette méthode ne tient pas compte des probabilités. Supposons par exemple
qu’une possibilité, disons e1 , est bien plus vraisemblable que toutes les autres. Alors, nous
devrions d’abord bien entendu demander si ceci est la bonne possibilité. Il y a de grandes
chances que nous frappions juste et trouvions la bonne possibilité avec une seule question.
C’est seulement si la réponse est “non” que nous devrons continuer. Examinons un exemple.
F IG . 1.5 – Dans cette alternative la longueur moyenne des mots est réduite à 2.75.
Comme l’exemple le démontre, nous devrions tenter de sélectionner nos questions de façon
à minimiser le nombre moyen de questions nécessaires. Ceci n’est pas une tâche banale. Ce-
pendant, la solution à ce problème est connue et fréquemment utilisée en théorie du codage
comme exposé dans le chapitre 5. L’idée-clé est de diviser l’ensemble des possibilités, non pas
en sous-ensembles de cardinalité égale, mais en sous-ensembles de probabilité égale. On sait
en particulier, d’après la théorie du codage, que le nombre moyen de questions est approxima-
tivement
m
X
− pi log pi .
i=1
1.1. ENTROPIE 11
Cette grandeur est appelée entropie, et nous proposons de l’utiliser comme mesure de la quan-
tité d’incertitude dans un système de choix probabiliste. Nous n’excluons pas que certaines
des probabilités pi tendent vers zéro, pi = 0. Dans ce cas nous adoptons la convention selon
laquelle 0 log 0 = 0, ce qui est raisonnable étant donné que limx→0 x log x = 0.
Une fois de plus, cette définition comporte un certain degré d’arbitraire. La base k du loga-
rithme dans l’entropie correspond, comme dans la section précédente, au nombre k de réponses
possibles à chaque question dans le jeu des questions-réponses. Nous laissons ceci ouvert, étant
donné qu’un changement de la base correspond seulement à un changement d’unité. Comme
précédemment, le logarithme en base 2 est le plus populaire; l’unité correspondante est le bit;
nous allons généralement l’employer dans les exemples.
Exemple 1.6 (Arbres liés à un système de choix probabiliste - Suite) Nous complétons
l’exemple 1.5 en calculant la quantité d’incertitude dans le système de choix probabiliste; ce
qui revient à calculer l’entropie.
8
X
H(P ) = − pi log pi
i=1
= −0.3 · log 0.3 − 0.2 · log 0.2 − 0.2 · log 0.1
−0.15 · log 0.05 − 0.15 · log 0.15
≈ 2.7087 bit
Donc H(P ) est inférieur à la longueur moyenne des mots dans le meilleur arbre.
Ceci est une expression du principe de raison insuffisante de Laplace qui dit que si vous n’avez
pas d’autre information, posez des probabilités égales. Dans ce contexte ceci fonctionne bien.
En ce sens, l’entropie couvre aussi le cas particulier des systèmes de choix sans probabilités.
Pour un système de choix S avec |S| = m, intuitivement, nous avons une incertitude maxi-
male si nous ne connaissons pas les probabilités, ou si nous posons des probabilités uniformes
(égales) sur toutes les possibilités.
D ÉMONSTRATION Nous avons log x = log e·ln x, où ln représente le logarithme naturel (en
base e). ln x est une fonction concave, ce qui signifie que tous les points de son diagramme
sont sous sa tangente (see Figure 1.6). Si nous prenons la dérivée de ln x dans le point x = 1,
alors nous obtenons ln x ≤ x − 1 avec égalité si, et seulement si, x = 1. Par conséquent,
nous avons
qi qi
ln ≤ − 1,
pi pi
d’où
m
X X m
X m
qi
pi ln ≤ qi − pi = 1 − 1 = 0.
pi
i=1 i=1 i=1
Ceci montre que (1.4) est vérifié avec l’égalité si, et seulement si, qi /pi = 1 pour tous i,
c’est-à-dire pi = qi . ¥
En appliquant ce lemme, on a
m
X m
X 1
H(P ) − log m = − pi log pi + pi log ≤ 0,
m
i=1 i=1
avec égalité si, et seulement si, pi = 1/m. Nous avons démontré le théorème suivant :
1.1. ENTROPIE 13
Théorème 1.2
où le maximum est pris sur toutes les distributions de probabilité P pour m possibi-
lités. Ce maximum est atteint pour la distribution équiprobable uniquement.
1. Si (S1 , P1 ) et (S2 , P2 ) sont deux systèmes de choix probabilistes avec |S1 | = |S2 | et
P1 = P2 , alors H(P1 ) = H(P2 ). Ceci signifie que l’entropie dépend uniquement de
la distribution de probabilités, et non pas de la nature des possibilités ei dans le sys-
tème de choix. Ceci découle directement de la définition de l’entropie (1.3) qui dépend
uniquement des probabilités pi .
2. Nous avons
qui résulte de la convention 0 · log 0 = 0. Elle signifie que les possibilités à probabilité
tendant vers zéro importent peu pour la quantité d’incertitude. Ceci est raisonnable, étant
donné que nous pouvons être sûrs que de telles possibilités ne sont jamais sélectionnées.
3. Considérons un schéma à deux niveaux comme illustré sur la figure 1.7. Au premier
niveau, une des deux possibilités est sélectionnée, avec les probabilités p et q = 1 − p.
Si au premier niveau, la première possibilité est sélectionnée, alors au second, une des
n possibilités est sélectionnée avec les probabilités pi /p. Si la seconde possibilité est
sélectionnée au premier niveau, alors une des m possibilités est sélectionnée au second
niveau avec les probabilités qi /q. Ici il est admis que
n
X m
X
pi = p, qi = q.
i=1 i=1
14 CHAPITRE 1. INCERTITUDE ET INFORMATION
p1 + p2 + · · · pn + q1 + q2 + · · · qm = 1,
H(p1 , p2 , . . . , pn , q1 , q2 , . . . , qm )
p1 p2 pn q1 q2 qm
= H(p, q) + pH( , , . . . , ) + qH( , , . . . , ).
p p p q q q
Ceci peut être vérifié d’après la définition de l’entropie.
F IG . 1.7 – Un système de choix probabiliste à deux niveaux dans lequel une des deux possibi-
lités est sélectionnée avec les probabilités p et q = 1 − p et, au second niveau, soit une des n
possibilités avec la probabilité pi /p soit une des m possibilités avec la probabilité qi /q.
H(p1 , . . . , pn ) = H(p1 + p2 , p3 , . . . , pn )
p1 p2
+(p1 + p2 )H( , ),
p1 + p2 p1 + p2
pour chaque distribution de probabilité p1 , . . . , pn avec n ≥ 2.
4. H( n1 , . . . , n1 ) est croissant avec n.
Ces propositions sont très faciles à démontrer. Leur importance réside dans le fait qu’elles
sont des propriétés caractérisantes pour l’entropie. Cela signifie que lorsque nous imposons
ces quatre conditions raisonnables sur une mesure d’incertitude, nous obtenons nécessairement
l’entropie pour cette mesure.
1.1. ENTROPIE 15
H(p1 , p2 , . . . , pn )
n
X
= −p1 log p1 − p2 log p2 − pi log pi
i=3
n
X
= −(p1 + p2 ) log(p1 + p2 ) − pi log pi
i=3
+p1 log(p1 + p2 ) − p1 log p1 + p2 log(p1 + p2 ) − p2 log p2
µ ¶
p1 p1 p2 p2
= H(p1 + p2 , p3 , . . . , pn ) − (p1 + p2 ) log + log
p1 + p2 p1 + p2 p1 + p2 p1 + p2
p1 p2
= H(p1 + p2 , p3 , . . . , pn ) + (p1 + p2 )H( , ).
p1 + p2 p1 + p2
(4) Résulte du fait que H( n1 , . . . , n1 ) = log n et que le logarithme est une fonction croissante.
¥
si {p(ω) : ω ∈ Ω} sont les probabilités définies sur l’échantillon d’espace fini Ω. L’ensemble
{pX (x) : x ∈ S} définit alors les probabilités sur l’espace de choix S. Nous pouvons donc
aussi bien parler de variables aléatoires au lieu de systèmes de choix probabilistes, et définir,
en conséquence :
Définition 1.4 (Entropie d’une v.a.) L’entropie de la variable X avec des valeurs
dans S est définie par :
X
H(X) = − pX (x) log pX (x).
x∈S
Ceci mesure donc l’incertitude associée à la variable aléatoire X. Dans ce qui suit, ce sera
souvent une façon plus commode de voir les choses.
16 CHAPITRE 1. INCERTITUDE ET INFORMATION
Exemple 1.7 (Bernoulli) Admettons que X soit une variable aléatoire binomiale représen-
tant n épreuves de Bernoulli, soit avec
µ ¶
n x
pX (x) = p (1 − p)n−x .
x
Théorème 1.3 L’entropie d’une variable aléatoire X à valeurs dans S est bornée
par :
0 ≤ H(X) ≤ log |S|
Les bornes peuvent être atteintes :
– H(X) = 0 dans le cas d’un système déterministe (une seule valeur de S a un
probabilité de 1, toutes les autres ont une probabilité nulle).
– H(X) = log |S| dans le cas d’un système équiréparti (voir théorème 1.2).
– Nous avons vu que pour un choix probabiliste, représenté par un système de choix proba-
biliste, on doit employer une stratégie différente dans le jeu des questions-réponses : au
lieu de diviser l’ensemble de possibilités en sous-ensembles de cardinalité égale, nous le
divisons en sous-ensembles de probabilité presque égale. Ceci mène, approximativement,
à l’entropie en tant que logarithme du nombre moyen de questions et, ainsi, comme mesure
appropriée de l’incertitude;
– Nous avons vu que l’incertitude d’un système de choix égale l’entropie d’un choix proba-
biliste à probabilités égales, soit une distribution de probabilité uniforme. Ceci correspond
au principe de raison insuffisante de Laplace. Donc le concept d’entropie couvre aussi le
cas de systèmes de choix non probabilistes;
– En fait, des probabilités égales, ou des systèmes de choix sans probabilités connues repré-
sentent, pour un ensemble S d’une cardinalité donnée, la plus grande incertitude;
– L’entropie dépend uniquement de la distribution de probabilité d’un système de choix, et
non pas de la nature des possibilités;
– Nous avons vu quelques propriétés simples de l’entropie qui caractérisent ce concept.
Évaluation 5
1.1. ENTROPIE 17
Évaluation 6
0.21 0.79
F IG . 1.8 – Calculez la longueur moyenne des mots et l’entropie dans cet arbre binaire.
Évaluation 7
Ceci est une distribution de probabilité bi-dimensionnelle. Nous pouvons calculer les deux
(1) (1) (1) (2) (2) (2)
distributions marginales P1 = {p1 , p2 , . . . , pn }, et P2 = {p1 , p2 , . . . , pm }, définies
par
m
X n
X
(1) (2)
pi = pi,j , pj = pi,j . (1.6)
j=1 i=1
Ceci nous donne donc deux systèmes de choix probabilistes associés (S1 , P1 ) et (S2 , P2 ).
Nous allons introduire une variable aléatoire pour chaque système de choix probabiliste comme
expliqué à la fin de la sous-section précédente. Donc, admettons que X soit associé au système
(S1 , P1 ) et Y au système (S2 , P2 ). La paire de variables (X, Y ) est alors associée au système
probabiliste composé (S1 ×S2 , P ). Nous avons la distribution de probabilité bi-dimensionnelle
p(X,Y ) (e1,i , e2,j ) = pi,j pour la paire de variables aléatoires (X, Y ). La variable X possède
(1) (2)
la distribution marginale pX (e1,i ) = pi et Y la distribution marginale pY (e2,j ) = pj .
Rappelons que deux systèmes de choix probabilistes, ou deux variables aléatoires X et Y sont
appelés indépendants, si, et seulement si,
Nous avons trois entropies différentes associées aux trois systèmes de choix probabilistes : les
deux variables uniques X et Y et la variable bi-dimensionnelle (X, Y ),
X X
H(X, Y ) = − pX,Y (x, y) log pX,Y (x, y),
x∈S1 y∈S2
X
H(X) = − pX (x) log pX (x),
x∈S1
X
H(Y ) = − pY (y) log pY (y).
y∈S2
1.1. ENTROPIE 19
Exemple 1.8 (Système de choix probabiliste composé) Etant donné un système de choix
indépendants composés
et deux variables aléatoires (X, Y ) associées à (S1 × S2 , P ), il est aisé d’identifier les sys-
tèmes de choix ’simples’
En appliquant (1.6) nous obtenons les deux distributions marginales P1 = {0.6, 0.4} et P2 =
{0.8, 0.2}. Nous sommes maintenant en mesure de calculer les entropies
X X
H(X, Y ) = − pX,Y (x, y) log pX,Y (x, y)
x∈S1 y∈S2
= −0.5 · log 0.5 − 0.1 · log 0.1 − 0.3 · log 0.3 − 0.1 · log 0.1
≈ 1.6855 bit,
X
H(X) = − pX (x) log pX (x) = −0.6 log 0.6 − 0.4 log 0.4
x∈S1
≈ 0.9710 bit,
X
H(Y ) = − pY (y) log pY (y) = −0.8 log 0.8 − 0.2 log 0.2
y∈S2
≈ 0.7219 bit.
La question qui se pose est la suivante : « comment les trois entropies ci-dessus sont-elles
liées ? » La réponse se trouve dans le théorème suivant
H(X) + H(Y )
à !
X X
= − pX (x) log pX (x) + pY (y) log pY (y)
x y
à !
XX XX
= − pX,Y (x, y) log pX (x) + pX,Y (x, y) log pY (y)
x y x y
à !
XX
= − pX,Y (x, y) log pX (x) · pY (y) .
x y
20 CHAPITRE 1. INCERTITUDE ET INFORMATION
ce qui démontre l’inégalité (1.7). D’après le lemme 1.1 nous avons l’égalité dans la dernière
inégalité si, et seulement si, pX,Y (x, y) = pX (x) · pY (y), ce qui signifie que X et Y sont
indépendants. ¥
Ce théorème nous apprend que les entropies de deux variables ne s’ajoutent à l’entropie des
variables bi-dimensionnelles composées que si les variables sont indépendantes. Si ce n’est
pas le cas, il y a moins d’incertitude dans la situation composée que dans les deux systèmes
de choix simples. La raison en est que l’inter-dépendance des variables, (leur corrélation) crée
certaines parties d’incertitude “communes” aux deux variables.
Exemple 1.9 (Système de choix probabiliste composé - Suite) Dans l’exemple 1.8 nous
avons les variables aléatoires X et Y . Vérifiez vous-même que H(X, Y ) < H(X) + H(Y ).
Le théorème 1.4 peut aisément être étendu à plus de deux variables. Notons X le vecteur
(X1 , X2 , . . . , Xm ) de m variables aléatoires Xi . Cette variable aléatoire vectorielle possède
la distribution de probabilité pX (x), où x = (x1 , x2 , . . . , xm ) et chaque variable Xi a la
distribution marginale
X
pXi (xi ) = pX (x1 , x2 , . . . , xi−1 , xi , xi+1 , . . . , xm ).
x1 ,...,xi−1 ,xi+1 ,...,xm
Revenons au cas de deux entités et considérons une variable aléatoire X liée à une situation
de choix probabiliste (S, P ), et supposons qu’un événement E ⊆ S est observé. En quoi cela
affecte-t-il l’incertide ?
L’observation de l’événement E change la variable aléatoire X en variable conditionnelle XE
liée à la nouvelle situation de choix probabiliste (E, PXE ).
Définition 1.5 Soit X une variable aléatoire liée à une situation de choix probabiliste
(S, P ). On note XE la variable aléatoire conditionnelle X étant donné un événement
E ⊆ S ; i.e. XE est liée à la nouvelle situation de choix probabiliste (E, PXE ).
Sa distribution de probabilité est donnée par :
pX (x)
pXE (x) = , pour x ∈ E.
pX (E)
L’observation de E change donc l’incertitude de H(X) à H(XE ), qui est appelée entropie
conditionnelle.
Exemple 1.11 (Entropie conditionnelle) Soit X une variable aléatoire liée à la situation de
choix probabiliste (S, P ) donnée par S = {1, 2, 3, 4}, P = {0.5, 0.25, 0.125, 0.125}, et
E = {1, 3} un événement. Ainsi
H(X) = −0.5 log 0.5 − 0.25 log 0.25 − 0.125 log 0.125 − 0.125 log 0.125
= 1.75bit.
Avec pX (E) = 0.625, pXE (1) = pX (1)/pX (E) = 0.8 et pXE (3) = pX (3)/pX (E) = 0.2
( )
( )
( )= ( ) log ( )
( )
0 ( ) 0 = ( )
2
60 CHAPITRE 3. PROCESSUS STATIONNAIRES & CHAÎNES DE MARKOV
F IG . 3.1 – Le théorème AEP : pour 0 < h∞ < log m et n grand, presque toutes les séquences
de Ωn sont non-typiques (grains de sable) et leur contribution au volume total est négligeable.
Par contraste, le nombre relatif de séquences typiques (galets) est négligeable, mais leur vo-
lume représente la quasi-totalité du volume total.
d’information n h∞ portée par une séquence de longueur n avec un taux d’entropie h∞ sur un
alphabet m peut, de façon équivalente, être obtenue
A) par l’ensemble de séquences de longueur effective neff = (1−R)n distribuée équiproba-
blement sur m catégories; le taux d’entropie de ce nouveau processus atteint maintenant
son maximum log m.
B) par l’ensemble de séquences de longueur n distribuées équiprobablement sur m(1−R)
catégories, avec un taux d’entropie correspondant de log m(1−R) = (1 − R) log m.
Modifier le processus original ne modifie pas l’information totale, qui reste égale à nh∞ :
Cependant, la redondance du processus modifié est à présent de zéro dans les deux cas: l’ap-
plication de 3.11 produit
log m (1 − R) log m
RA = 1 − = 0 (A) RB = 1 − = 0 (B)
log m (1 − R) log m
Les façons précises et détaillées dont les séquences initiales peuvent être compressées (du point
de vue de leurs longueurs (A) ou de la taille de leur alphabet (B)) constitue une partie de la
théorie du codage (voir module C2).
Exemple 3.5 L’entropie d’un texte « représentatif » en anglais simplifié avec m = 27 caté-
gories (pas de ponctuation ni de distinction minuscule/majuscule, soit 26 lettres un caractère
« espace ») a été estimée à environ h∞ = 1.3 bits par lettre, correspondant à une redon-
dance d’environ R = 1 − 1.3/ log2 27 = 0.73 (Shannon 1950, cité dans Cover and Thomas
1991). Ce qui signifie qu’un roman de 300 pages pourrait tout à fait être réduit à un roman
de 300(1 − 0.73) = 81 pages avec le même alphabet, ou à un roman de même longueur avec
seulement 27(1−0.73) = 2.43 (c’est-à-dire au moins 3) symboles. L’aspect d’un échantillon
de ce texte pourrait ressembler à ceci
MUUMMXUUMMMMUMXXUMXMMXMMUXMUMXMMMMXXXUUXMXMUUXMUXMUXMU
UMUXUMUUUXMMUUUMXMMMXXXXMUMXXMMXXMUMXUMUUXMUUXMMMXMUXX
3.2. LE THÉORÈME AEP 61
UXXXUXXUUMMUXUXMUUMXUUXMUXXUXUMUUUXXXMMXXUMXUUUMMUXMXM
La redondance de ce nouveau texte est maintenant de zéro, ce qui signifie que la plus petite
modification modifierait le contenu de l’ouvrage. Par contraste, la redondance élevée (R =
0.73) de l’anglais standard permet de corriger et de récupérer un texte altéré, qui contiendrait
par exemple des fautes d’orthographe.
Note : l’exemple ci-dessus présuppose que l’anglais écrit est produit par un processus sto-
chastique stationnaire, ce qui est bien entendu discutable.
Évaluation 19
Exemple 3.6 Des prévisions météorologiques largement simplifiées placent chaque journée
dans l’une de ces trois catégories: « belle » (N), « pluvieuse » (R) ou « neigeuse » (S). Par
exemple, « NNRNSRN » constitue une semaine météorologique possible. Il y a un maximum
de 3n séquences différentes de n jours; chacune de ces séquences serait équiprobable (avec la
probabilité 3−n ) si le temps suivait effectivement un processus parfaitement aléatoire (avec
un taux d’entropie maximum de h∞ = log 3, comme l’indique le théorème 3.2). Cependant,
le temps réel n’est certainement pas un processus totalement aléatoire, c’est-à-dire que sa
redondance R est strictement positive:
– si R = 0.5 par exemple, alors, parmi toutes les 3n différentes séquences posssibles de n
jours, 3(1−0.5) n = 1.73n sont typiques.
– si R = 0.75, seules 3(1−0.75) n = 1.32n séquences de n jours sont typiques.
– si R = 1, seule 3(1−1) n = 30 = 1 séquence est typique, soit la seule séquence générée par
le processus en l’occurrence déterministe.
Dans cet exemple, le nombre effectif de types de temps possibles pour le jour suivant (tel
qu’il est mesuré par l’incertitude conditionnelle du jour précédent) passe de 3 à 1.73, 1.32 et
même à 1 puisque R augmente de 0 à 1.
62 CHAPITRE 3. PROCESSUS STATIONNAIRES & CHAÎNES DE MARKOV
Définition 3.6 Une chaîne de Markov de premier ordre, ou, plus simplement, une
chaîne de Markov, est un processus stochastique discret dont la mémoire est limitée
au dernier état, c’est-à-dire:
Exemple 3.7 Considérons un processus à deux étapes avec un espace des états Ω = {a, b}.
Lorsque le système est dans l’état a, il reste dans le même état avec la probabilité 0.7 (et se
déplace vers l’état b avec la probabilité 0.3). Lorsque le système est dans l’état b, il reste dans
le même état avec la probabilité 0.6 (et se déplace vers l’état a avec la probabilité 0.4). Les
probabilités conditionnelles sont p(a|a) = 0.7, p(b|a) = 0.3, p(b|b) = 0.6 et p(a|b) = 0.4.
En numérotant a en 1 et b en 2, les probabilités s’expriment de façon équivalente comme
p11 = 0.7, p12 = 0.3, p21 = 0.4 et p22 = 0.6, ou, sous forme matricielle,
µ ¶
0.7 0.3
P = (3.12)
0.4 0.6
Considérons un processus gouverné par une chaîne de Markov qui est dans un état ωj au temps
t. Par définition, sa probabilité d’être dans l’état k au temps t + 1 est pjk . Mais qu’en est-il de
sa probabilité d’être dans l’état k au temps t + 2 ?
64 CHAPITRE 3. PROCESSUS STATIONNAIRES & CHAÎNES DE MARKOV
F IG . 3.3 – L’état a s’atteint lui-même et atteint les états b, c, d et e. L’état b s’atteint lui-même
et atteint les états c, d et e. L’état c s’atteint lui-même et atteint les états d et e. L’état d s’atteint
lui-même et atteint les états c et e, etc. Les classes d’équivalence de communication sont {a},
{b}, {c, d, e}, {f }, {g} et {h}.
Définition 3.7
– l’état j atteint l’état k, ce que l’on note j → k, s’il y a un chemin jl1 l2 · · · ln−1 k de
longueur n ≥ 0 tel que pjl1 pl1 l2 · · · pln−1 k > 0, c’est-à-dire s’il y a un n ≥ 0 tel que
(n) (0)
pjk > 0. Comme pjj = 1 > 0, chaque état s’atteint lui-même par construction:
j → j pour tout j.
– les états j et k commmuniquent, ce que l’on note j ↔ k, si et seulement si j → k
et k → j.
Exemple 3.9 Considérons une chaîne de Markov avec un squelette donné en figure 3.3. Les
flèches dénotent l’atteignabilité dans une étape. L’état a s’atteint lui-même et atteint les états
b, c, d et e. Cependant, a ne peut être atteint qu’à partir de lui-même. Ainsi, la classe d’équi-
valence de a (relativement à la relation « ↔ ») contient a lui-même. Si l’on pousse le rai-
sonnement plus loin, on découvre que les classes d’équivalence sont {a}, {b}, {c, d, e}, {f },
{g} et {h}.
On peut montrer que les états appartenant à la même classe d’équivalence sont soit tous récur-
rents, soit tous transients, ce qui justifie la définition suivante :
3.3. CHAÎNES DE MARKOV DE PREMIER ORDRE 65
F IG . 3.4 – Exemple 3.10 : Les classes d’équivalence de communication sont {a}, {e} (classes
récurrentes) et {b, c, d} (classe transiente). Les états a et e sont absorbants.
Définition 3.9 Les classes récurrentes sont des classes d’équivalence dont tous les
éléments sont récurrents. Les classes transientes sont des classes d’équivalence dont
tous les éléments sont transients. ¨
Dans l’exemple 3.9, les classes récurrentes sont {c, d, e} et {h}. Toutes les autres classes sont
transientes.
Exemple 3.10 Considérons la matrice de transition de Markov ci-dessous
1 0 0 0 0
0.5 0 0.5 0 0
P = 0 0.5 0 0.5 0
(3.14)
0 0 0.5 0 0.5
0 0 0 0 1
dont le squelette est représenté en figure 3.4. Il y a deux classes récurrentes, à savoir {a} et
{e}, et une classe transiente, à savoir {b, c, d}. Les états récurrents qui sont les seuls de leur
classe, comme a et e, ne peuvent pas être quittés une fois atteints. On dit que de tels états
sont absorbants. Une condition nécessaire et suffisante pour qu’un état j soit absorbant est
pjj = 1, comme cela a été démontré dans les rangées 1 et 5 de 3.14.
(n)
Il peut arriver que pjj = 0 pour tout n ne soit pas divisible par d, et que d soit le plus grand
entier ayant cette propriété. Ceci signifie que si la chaîne est dans un état j à un temps t, elle
ne peut qu’y retourner aux temps de la forme t + md où m est un entier. On dit alors que l’état
(n)
j est de la période d. On dit qu’un état avec la période d = 1 est apériodique. Si pjj = 0 pour
tout n ≥ 0, l’état j a une période infinie d = ∞. On peut montrer que les états appartenant à
la même classe d’équivalence ont tous la même période: par exemple, en figure 3.4, les états a
et e sont apériodiques, tandis que b, c et d sont de la période d = 2.
Exemple 3.11 Un arbre est un graphe ne contenant pas de circuit. La figure 3.5 gauche
représente une chaîne de Markov sur un arbre symétrique: il y a une seule classe d’équi-
valence récurrente {a, b, c, d, e, f } dont tous les états ont la période d = 2. En ajoutant un
seul circuit tel qu’en figure 3.5 milieu ou droite, on conserve la classe d’équivalence unique
{a, b, c, d, e, f }, mais tous les états sont maintenant apériodiques (d = 1).
F IG . 3.5 – Example 3.11. Gauche : le squelette sous-jacent est un arbre symétrique, et tous les
états sont de la période d = 2. L’adjout d’un seul circuit (milieu ou droite) rend tous les états
apériodiques (d = 1).
0.19967 0.30232 0.28125 0.19724
0.20108 0.34353 0.30090 0.13496
P (25) =
0.18813
0.30168 0.38828 0.11189
0.19752 0.20453 0.16520 0.40992
0.2 0.3 0.3 0.2 π1 π2 π3 π4
0.2 0.3 0.3
0.2 π1 π2 π3 π4
P (∞) =
0.2 =
0.3 0.3 0.2 π1 π2 π3 π4
0.2 0.3 0.3 0.2 π1 π2 π3 π4
et
Pla distribution d’équilibre correspondante est π = (0.2, 0.3, 0.3, 0.2). On peut vérifier que
m
j=1 πj pjk = πk est valable pour chaque k: en effet,
où (a) découle de la définition 3.6, (b) découle de la définition H(Xn |Xn−1 ) impliquant la
(n−1)
quantité pj , la probabilité que le système soit dans l’état j au temps n − 1, et (c) découle
(n−1)
du théorème 3.7, impliquant la quantité limn→∞ pj = πj . ¥
68 CHAPITRE 3. PROCESSUS STATIONNAIRES & CHAÎNES DE MARKOV
Exemple 3.13 On considère la chaîne de Markov (d’ordre 1) sur 2 états Ω = {a, b}, avec
p(a|a) = 2/3, p(b|a) = 1/3, p(b|b) = 2/3 et p(a|b) = 1/3 (figure 3.6). Par symétrie, la
distribution stationnaire correspondante est π(a) = π(b) = 0.5. Compte tenu de 3.18, son
taux d’entropie est
Exemple 3.14 On considère la table de mobilité N = (njk ), donnant l’effectif croisé « pro-
fession du père » (lignes j = 1, . . . , 5) par « premier emploi à plein temps du fils » (colonnes
k = 1, . . . , 5) pour 19’912 hommes américains en 1973 dans cinq catégories: a = « non-
manuel supérieur »; b = « non-manuel inférieur »; c = « manuel supérieur »; d = « manuel
inférieur »; e = « travail agricole » (source: Hout 1986, cité dans Mirkin 1996).
a b c d e total
′
a 1 414 521 302 643 ′
40 2 920
b 724 524 254 703 48 2′ 253
N =
c 798 648 856 1′ 676 108 4′ 086
(3.19)
d 756 914 771 ′
3 325 237 6′ 003
e 409 357 441 1 611 1 832 4′ 650
′ ′
′ ′ ′
total 4 101 2 964 2 624 7′ 958 2′ 265 19′ 912
En divisant chaque cellule njk par le total de ses rangées nj• on obtient ume matrice de
transition P = (pjk ) avec pjk := njk /nj• donnant les probabilités conditionnelles qu’un
individu (dont le père possède la profession j) ait un premier métier k:
a b c d e
a 0.48 0.18 0.10 0.22 0.01
b 0.32 0.23 0.11 0.31 0.02
P = (3.20)
c 0.20 0.16 0.21 0.41 0.03
d 0.12 0.15 0.13 0.55 0.04
e 0.09 0.08 0.09 0.35 0.39
Le métier du fils est donc le plus incertain lorsque le père est manuel supérieur (2.02 pour
Xn−1 = c) et le moins incertain lorsque le père est manuel inférieur (1.83 pour Xn−1 = d).
En moyenne, l’incertitude est
5
X
πj H(Xn |Xn−1 = j) = 0.26 × 1.85 + 0.17 × 2.01 + 0.13 × 2.02 +
j=1
+0.40 × 1.83 + 0.04 × 1.95 = 1.90 = h∞
ce qui n’est rien d’autre que le taux d’entropie du processus h∞ en raison de 3.18: comme
prévu et par construction, le taux d’entropie d’un processus de Markov mesure l’incertitude
conditionnelle moyenne sur l’état suivant, connaissant l’état
P précédent. Par contraste, l’incer-
titude totale (non conditionnelle) correspondante est − j πj log πj = 2.05 bits, ce qui est
plus grand que h∞ = 1.90 mais plus petit que l’incertitude uniforme log2 5 = 2.32 bits.
Évaluation 20
Vrai ou faux?
1. le taux d’entropie h∞ (X) d’une chaîne de Markov de premier ordre ne peut jamais
excéder son entropie totale (non conditionnelle) H(X) Réponses possibles: vrai - faux
2. le taux d’entropie h∞ (X) d’une chaîne de Markov de premier ordre ne peut jamais
égaler son entropie totale (non conditionnelle) H(X) Réponses possibles: vrai - faux
3. le taux d’entropie h∞ (X) d’une chaîne de Markov de premier ordre n’est pas défini si
la chaîne n’est pas régulière Réponses possibles : vrai - faux
4. le taux d’entropie h∞ (X) associé à une chaîne avec m catégories ne peut jamais excéder
log m. Réponses possibles : vrai - faux
3.3.5 Irréversibilité
(n) (n)
Comme limn→∞ pjk = πk d’après le théorème 3.7, la formule 3.21 montre que limn→∞ fk =
Pm (0)
j=1 fj πk = πk . Ce qui signifie qu’indépendamment du profil de la distribution initiale
70 CHAPITRE 3. PROCESSUS STATIONNAIRES & CHAÎNES DE MARKOV
f (0) , la distribution à long terme f (n) converge à long terme n → ∞ vers la distribution sta-
tionnaire π. On parle d’équilibre si f (0) = π. En résumé, un profil général non-équilibré
f (0) 6= Pm π évolue vers le profil d’équilibre f (∞) = π où il reste alors inchangé, puisque
πk = j=1 πj pjk en raison de 3.16.
La dynamique de Markov est donc irréversible : toute distribution initiale f (0) évolue toujours
vers la (seule) distribution stationnaire π, et jamais dans l’autre sens; aussi, la dissemblance
entre deux distributions, quelles qu’elles soient, disparaît durant l’évolution, comme le montre
le théorème suivant:
Théorème 3.9 Soient f (n) et g (n) deux distributions dont l’évolution 3.21 est gou-
vernée par le même processus de Markov régulier P = (pjk ). L’évolution rend les
deux distributions de plus en plus similaires (et de plus en plus similaires à la distri-
bution stationnaire π) au sens où
Cas particuliers:
K(f (n+1) ||π) ≤ K(f (n) ||π) (obtenu avec g (n) := π, ce qui implique g (n+1) = π): l’entropie
relative de f (n) relativement à π diminue avec n: de nouveau, limn→∞ f (n) = π.
K(π||g (n+1) ) ≤ K(π||g (n) ) (obtenu avec f (n) := π, ce qui implique f (n+1) = π): l’entropie
relative de π relativement à g (n) diminue avec n.
K(f (n+1) ||f (n) ) ≤ K(f (n) ||f (n−1) ) (obtenu avec g (n) := f (n−1) , ce qui implique g (n+1) =
f (n) ): la dissemblance entre la distribution actuelle et la précédente (telle que mesurée
par K(f (n) ||f (n−1) )) diminue avec n.
Exemple 3.15 (suite de l’exemple 3.13) Supposons que la distribution initiale f (0) soit
f (0) (a) = 0.9 et f (0) (b) = 0.1. En employant 3.21 et le théorème 3.6, les distributions
successives f (n) au temps t = n et leur divergence K(f (n) ||π) (en nats) relativement à la
distribution stationnaire π = f (∞) (avec π(a) = π(b) = 0.5) sont, dans l’ordre,
Évaluation 21
1. une fois qu’il a quitté un état, le système y retournera avec la probabilité un si l’état est
a) transient; b) absorbant; c) récurrent; d) apériodique.
2. la matrice d’identité I est la matrice de transition d’une chaîne de Markov dont tous les
états sont a) transients; b) absorbants; c) irréversibles; d) apériodiques.
3. soit P une matrice de transition deux-par-deux. Le nombre minimal de composants non-
zéro de P assurant la régularité de la chaîne de Markov est a) 1; b) 2; c) 3; d) 4.
4. supposons que P 5 = I, où P soit une matrice de transition de Markov finie et I la
matrice d’identité. Alors P est a) indéterminée; b) régulière; c) I; d) apériodique.
Définition 3.11 Une chaîne de Markov d’ordre r > 0 est un processus stochastique
discret dont la mémoire est limitée aux r états passés, soit:
Une chaîne de Markov d’ordre zéro est donc clairement un processus indépendant.
Tous les processus de Markov considérés ici sont stationnaires, c’est-à-dire que leurs
n−1
probabilités de transition p(xn |xn−r ) sont indépendantes du temps. Ces dernières
sont généralement dénotées ici par p(ω|α) où ω ∈ Ω est l’état actuel et α ∈ Ωr spéci-
états immédiatement antérieurs. Par construction, p(ω|α) := p(αω)/p(α) ≥
fie les rP
0 avec ω∈Ω p(ω|α) = 1. ¨
Une chaîne de Markov de r-ième ordre sur Ω définie par les transitions p(ω|α) où ω ∈ Ω et
α ∈ Ωr peut formellement être considérée comme une chaîne de Markov de premier ordre sur
Ωr avec une matrice de transition de probabilité (mr × mr ) Q = (qαβ ) (où α = α1r ∈ Ωr et
β = β1r ∈ Ωr ) donnée par
F IG . 3.7 – Une chaîne de Markov d’ordre r (ici k = 4) sur Ω est spécifiée par l’ensemble de
probabilités conditionnelles de la forme p(β4 |α1 α2 α3 α4 ). La même chaîne peut être consi-
dérée comme une chaîne de Markov de premier ordre qαβ sur Ωr où α = (α1 α2 α3 α4 ) et
β = (β1 β2 β3 β4 ); comme exprimé par 3.23, la matrice de transition qαβ est zéro, à moins que
β1 = α2 , β2 = α3 et β3 = α4 .
Rappel : en général, l’entropie conditionnelle hk (X) := H(Xk |X1k−1 ) est décroissante dans
k. D’autre part, 3.25 montre que le taux d’entropie h∞ (X) coïncide avec hr+1 (X). En conclu-
sion :
Théorème 3.10 Pour une chaîne de Markov de r-ième ordre, h∞ (X) = hr+1 (X).
C’est-à-dire
h1 (X) ≥ h2 (X) ≥ hr (X) ≥ hr+1 (X) = hr+2 (X) = hr+3 (X) = . . . = h∞ (X)
(3.26)
Le comportement 3.26 de hk (X) est illustré en figure 3.10 b) pour r = 1 et en figure 3.10 c)
pour r = 3.
Cas particuliers :
r = 1: le taux d’entropie devient
X X X X
h∞ = − π(α) p(ω|α) log p(ω|α) = − πj pjk log pjk
α∈Ω ω∈Ω j k
F IG . 3.8 – Une chaîne de Markov de second ordre p(ω|α) sur Ω = {a, b} (exemple 3.16) écrite
comme une chaîne de premier ordre qαβ sur les bigrammes α = α1 α2 ∈ Ω2 et β = β1 β2 ∈ Ω2 .
Les transitions sont interdites si α2 6= β1 : par exemple, la transition de α = ab à β = aa est
impossible.
Par symétrie, la distribution stationnaire π(α1 , α2 ) obéissant à 3.24 s’avère être la distribution
uniforme sur Ω2 , soit π(aa) = π(ab) = π(ba) = p(bb) = 41 . Par exemple, on vérifie que
l’égalité suivante est valable
1 1 1
π(aa) p(a|aa) + π(ba) p(a|ba) = 0.3 + 0.7 = = π(aa)
4 4 4
ainsi que d’autres égalités impliquées dans 3.24. Le taux d’entropie 3.25 est
Jusqu’à présent, nous avons considéré que les divers modèles qui nous intéressaient (station-
naire, Markov d’ordre r, Markov d’ordre 1, etc.) étaient donnés. Très souvent, cependant, nous
ne disposons que d’une réalisation empirique d’un processus, c’est-à-dire que seules les don-
nées D sont connues, et que les modèles M doivent être inférés à partir des données D. Ce
74 CHAPITRE 3. PROCESSUS STATIONNAIRES & CHAÎNES DE MARKOV
P
F IG . 3.9 – L’identité γ∈Ωl n(βγ) = n(β) a lieu si et seulement si il n’y a pas d’occurrence
d’un symbole de β dans les l derniers symboles de xn1 .
type de situation est paradigmatique en statistique inférentielle (voir module S1). Par souci de
clarté, les grandeurs empiriques (respectivement théoriques) seront dorénavant indexées par la
lettre D (respectivement M ).
Aussi avons-nous
X
n(βγ) ≤ n(β)
γ∈Ωl
où l’égalité est atteinte ssi les données xn1 ne contiennent pas d’occurences d’éléments de β
plus proches que l endroits du bord de droite (voir figure 3.9).
La distribution empirique et la distribution empirique conditionnelle sont définies comme
n(β) n(βγ)
f D (β) := f D (γ|β) := P ′
β ∈ Ωk γ ∈ Ωl (3.27)
n−k+1 γ ′ ∈Ωl n(βγ )
P
où les dénominateurs assurent une normalisation correcte, à savoir β∈Ωk f D (β) = 1 et
P D
γ∈Ωl f (γ|β) =P1. Asymptotiquement, soit pour n grand, nous avons approximativement
∼ ∼
n − k + 1 = n et γ∈Ωl n(βγ) = n(β), et ainsi
n(β) n(βγ)
f D (β) ∼
= f D (γ|β) ∼
= β ∈ Ωk γ ∈ Ωl (3.28)
n n(β)
Afin de souligner le contraste avec les ditributions empiriques, nous dénoterons dorénavant les
distributions théoriques correspondantes f M (β) et f M (γ|β) avec
p(βγ)
f M (β) := p(β) f M (γ|β) :=
p(β)
3.5. RECONSTRUCTION DE MODÈLES DE MARKOV À PARTIR DES DONNÉES 75
Exemple 3.17 La l-ième séquence Thue-Morse Dl est une séquence binaire construite ré-
cursivement comme suit:
D0 = 1 Dl+1 = Dl · D̄l
l Séquence Thue-Morse Dl
0 1
1 10
2 1001
3 10010110
4 1001011001101001
5 10010110011010010110100110010110
6 1001011001101001011010011001011001101001100101101001011001101001
symbole 1 0 total
1 1
fréquence empirique relative 2 2 1
bigramme 11 10 01 00 total
fréquence empirique relative 10 ∼
= 1 21
= 1 21
= 1 11 ∼
= 1
1
63 6 63 3 63 3 63 6
trigramme 111 110 101 100 011 010 001 000 total
fréquence rel. emp. 0 10 ∼
= 16 10 ∼
= 16 11∼
= 16 10∼
= 16 10 ∼
= 16 11∼
= 16 0 1
62 62 62 62 62 62
Les valeurs des distributions empiriques f D (β) et les distributions conditionnelles f D (γ|β)
(comme celles trouvées dans l’exemple 3.17) peuvent servir à définir un modèle, i.e. des distri-
76 CHAPITRE 3. PROCESSUS STATIONNAIRES & CHAÎNES DE MARKOV
Considérons une chaîne de Markov de r-ième ordre définie par la distribution conditionnelle
f M (ω|α) où ω ∈ Ω et α ∈ Ωr . La probabilité d’observer les données xn1 est
n
Y Y Y
P (xn1 ) = p(xr1 ) p(xi |xi−1 r
i−r ) = p(x1 ) f M (ω|α)n(αω)
i=r+1 α∈Ωr ω∈Ω
Théorème 3.11 (formule des types pour les chaînes de Markov) Pour les chaînes
de Markov d’ordre r, la probabilité d’observer la distribution empirique condition-
nelle f D (ω|α) (pour tout ω ∈ Ω et α ∈ Ωr ) est, asymptotiquement,
où
X
Kr (f D ||f M ) := f D (α) K([f D ||f M ]|α) (3.32)
α∈Ωr
X f D (ω|α)
K([f D ||f M ]|α) := f D (ω|α) ln (3.33)
f M (ω|α)
ω∈Ω
En particulier, pour des effectifs donnés n(αω) (et donc pour des f D (α) donnés et pour des
f D (ω|α)) donnés, la probabilité 3.31 est maximale si et seulement si f˜M (ω|α) = f D (ω|α):
comme prévu, l’estimation de vraisemblance maximale du modèle M est simplement donnée
par la grandeur empirique correspondante (voir module S1 pour une exposition plus détaillée
du cas indépendant).
3.5. RECONSTRUCTION DE MODÈLES DE MARKOV À PARTIR DES DONNÉES 77
Exemple 3.18 Considérons une chaîne de Markov de premier ordre avec deux états a et b.
Dans un état donné (a ou b), le système reste dans le même état avec la probabilité 0.9, et
change avec la probabilité 0.1. C’est-à-dire f M (a|a) = 0.9, f M (b|a) = 0.1, f M (b|b) = 0.9
et f M (a|b) = 0.1. Supposons que les données soient de la forme
D ≡ aaaa
| ·{z
· · aaaa}
n fois
f D (a|a) f D (b|a)
K([f D ||f M ]|a) = f D (a|a) ln M
+ f D (b|a) ln M =
f (a|a) f (b|a)
1 0
= 1 ln + 0 ln = 0.105 nats
0.9 0.1
D’autre part, ni f D (a|b) ni f D (b|b) ne sont définis, puisque le système n’a jamais été observé
dans l’état b: les équations 3.27 ou 3.28 retournent la valeur indéterminée 0/0 (que l’on
considère finie). Donc K([f D ||f M ]|b) n’est pas défini, mais K1 (f D ||f M ) l’est:
Ainsi
Exemple 3.19 (exemple 3.18, suite). Par symétrie, la probabilité stationnaire associée à la
chaîne est π(a) = π(b) = 0.5, et le taux d’entropie est
Donc la taille de l’ensemble des séquences typiques augmente jusqu’à |Tn (ε)| ∼ = exp(0.325 ·
n n
n) = (1.38) , au lieu de 2 pour un processus maximalement aléatoire (= indépendant +
uniforme). En d’autres termes, la dynamique du système observé se comporte comme si
seuls 1.38 choix effectifs étaient à disposition à chaque étape, au lieu de 2 choix effectifs (à
savoir a et b) pour la dynamique maximalement aléatoire.
Supposons que l’on observe une séquence xn1 ∈ Ωn de longueur n avec m := |Ω| états dont
on pense qu’ils sont générés par une chaîne de Markov d’ordre r. La spécification complète de
cette dernière nécessite que l’on détermine toutes les grandeurs de la forme f M (ω|α) pour tout
ω ∈ Ω et α ∈ Ωr soit un total de mr (m − 1) grandeurs (les grandeurs P f M (ω|α) ne sont pas
complètement libres, mais elles doivent obéir aux mr contraintes ω∈Ω f M (ω|α) = 1 pour
tout α ∈ Ωr , d’où le facteur m − 1).
Mais même pour des valeurs relativement modestes de m et r, le nombre de paramètres libres
mr (m − 1) augmente très rapidement (par exemple 48 paramètres libres pour m = 4 et r = 2,
ou 54 paramètres libres pour m = 3 et r = 3). Par conséquent, la quantité de données D
requise pour estimer tous ces paramètres avec une marge d’erreur raisonnable devient très
grande! Ce phénomène, que l’on appelle parfois la malédiction de la dimensionnalité, repré-
sente un inconvénient majeur qui restreint énormément l’emploi des modèles markoviens pour
r grand, malgré la généralité et la flexibilité de ces derniers.
Concrètement, considérons l’estimation de vraisemblance maximale qui consiste à estimer
f M (ω|α) comme la valeur f˜M (ω|α) maximisant P (f D |f M ) pour une f D donnée. La formule
des types 3.31 démontre alors que la recherche de la fˆM (ω|α) estimée est simplement donnée
par la distribution empirique correspondante f˜M (ω|α) = f D (ω|α). Mais une séquence D =
xn1 de longueur n contient un maximum de n−r transitions distinctes α → ω, et si m ou r sont
assez grands, la majorité des transitions observées théoriquement ne se produiront simplement
pas dans D = xn1 , et les estimations de vraisemblances maximales correspondantes seront
données par la valeur fˆM (ω|α) = 0, même si f M (ω|α) > 0.
Ce problème de transitions inobservées se produit chaque fois que le nombre d’états pos-
sibles m ainsi que l’ordre de la chaîne r sont grands en comparaison de la taille échantillon
n. Différents remèdes ont été proposés afin de pallier à ce problème, comme la « stratégie du
trigramme » qui consiste à estimer f M (ω3 |ω1 ω2 ) (pour une chaîne de Markov d’ordre r = 2)
comme
fˆM (ω3 |ω1 ω2 ) = λ0 f D (ω3 ) + λ1 f D (ω3 |ω2 ) + λ2 f D (ω3 |ω1 ω2 )
où le choix optimal des poids non-négatifs λ0 , λ1 et λ2 , obéissant à λ0 + λ1 + λ2 = 1 est
typiquement déterminé par essai et erreur et a pour but de maximiser un indice de performance
relativement à une application donnée.
3.5. RECONSTRUCTION DE MODÈLES DE MARKOV À PARTIR DES DONNÉES 79
Bien qu’elles soient parfois satisfaisantes pour une application pratique donnée, de telles es-
timations manquent de fondements théoriques et de justification formelle. Cette situation est
quelque peu analogue au problème des espèces inobservées qui se produit chaque fois que
le nombre d’états possibles m est si grand en comparaison de la taille échantillon n qu’il se
peut que certains états n’aient pas été observés du tout dans les données D. Bien qu’il ait
été identifié clairement dans les données textuelles et biologiques depuis un certain temps, ce
problème n’a pas reçu de solution simple et universellement convenue; on peut toutefois se
référer au module L1 pour une stratégie qui vise à estimer le nombre total d’états (= observés
+ inobservés) possibles.
Supposons que le modèle M soit une chaîne de Markov d’ordre r. Alors le théorème 3.10
implique
hM M M M M M M
1 ≥ h2 ≥ hr ≥ hr+1 = hr+2 = hr+3 = . . . = h∞ = h
M
Donc le plus grand k pour lequel dM k est strictement positif indique l’ordre r = k de la chaîne
M
de Markov M . Intuitivement, dk mesure la réduction de l’incertitude lorsque le dernier sym-
bole d’une séquence est prédit à l’aide d’un passé de longueur k au lieu de k − 1, d’où dMk =0
si k > r.
Comme avec tout problème inférentiel en statistique, la difficulté est due au fait que les entro-
pies conditionnelles hM k
k sont des grandeurs théoriques définies par (m − 1)m paramètres qui
n
ne sont pas directement observables. Mais si les données D = x1 sont assez nombreuses, on
s’attend à ce que hD M
k soit proche de hk , pour k petit. Aussi le rapport « nombre de paramètres
log n
à estimer/nombre de données » est-il petit si et seulement si k est petit relativement à log m.
Donc les estimations empiriques sont bonnes tant que k ≤ kmax , où kmax est de l’ordre de
log n
log m . Les figures 3.10 et 3.11 suggèrent que
1 log n
kmax := (3.34)
2 log m
est un choix pragmatique satisfaisant.
Par conséquent, pour k ≤ kmax , de grandes valeurs de dDk constituent un signe que le modèle
est probablement d’ordre k, comme le confirme le test de vraisemblance maximale ci-dessous:
80 CHAPITRE 3. PROCESSUS STATIONNAIRES & CHAÎNES DE MARKOV
Le test d’ordre
Considérons un processus de Markov sur |Ω| = m états observés n fois successives, à propos
duquel, pour k ≤ kmax , deux hypothèses sont en compétition, à savoir:
H0k : : « le processus est gouverné par une chaîne de Markov d’ordre k − 1 »
H1k : « le processus est gouverné par une chaîne de Markov d’ordre (strict) de k »
Alors H0k est rejetée au niveau α si
2n dD D D 2 2 k−1
k = 2n [hk − hk+1 ] ≥ χ1−α [(m − 1) m ] (3.35)
où dD
k est mesuré en nats.
Exemple 3.20 Soit M une chaîne de Markov binaire d’ordre 3 spécifiée par f M (ω4 |ω1 ω2 ω3 )
sur Ω = {a, b}. Une séquence de longueur n = 1024 est générée à partir de ce modèle,
d’après lequel les distributions empiriques f D sont déterminées et les entropies condition-
nelles hD
k (X) calculées.
k hD
k dDk 2n dDk df χ20.999 [df]
1 0.692 0 0 1 10.8
2 0.692 0.001 2.05 2 13.8
3 0.691 0.054 110.59 4 16.3
4 0.637 0.006 12.29 8 18.
5 = kmax 0.631 0.0088 18.022 16 20.5
P (f D |f˜k ) P (f D |f˜k )
LL := log
P (f D |f˜k−1 ) P (f D |f˜k−1 )
où f˜k est, (dans le sens ML), le meilleur modèle de f D par une chaîne de Markov d’ordre
k, et f˜k−1 est le meilleur modèle pour f D d’ordre k − 1. Le premier est plus général que le
dernier et va donc aboutir à un meilleur ajustement, soit P (f D |f˜k ) ≥ P (f D |f˜k−1 ), c’est-à-
dire LL ≥ 0. D’autre part, la formule 3.31 des types P (f D | f M ) ≅ exp(−n Kr (f D ||f M ))
donne
Finalement, les divergences conditionnelles Kr (f D ||f˜r ) sont, pour n grand, bien représen-
tées par leurs approximations quadratiques, les « khi-carrés » 21n χ2 (f D ||f˜r ). On peut dé-
montrer que ces derniers suivent sous le modèle f˜r , une distribution du khi-carré χ2 [df] où
df est le nombre de paramètres libres associés au modèle d’ordre r. On a donc démontré que
la différence 2n[Kk−1 (f D ||f˜k−1 ) − Kk (f D ||f˜k )], causée par les fluctuations de f D possi-
blement produites par f˜k mais non par f˜k−1 , se comporte comme un χ2 [df] avec df égal à la
différence des nombres de paramètres libres entre les deux modèles.
En assemblant les les pièces, on obtient la recette inférentielle « rejeter le modèle f˜k−1 et
accepter le modèle f˜k au niveau α si 2n [Kk−1 (f D ||f˜k−1 ) − Kk (f D ||f˜k )] ≥ χ21−α [df] » où
df est ici (m − 1) mk − (m − 1) mk−1 = (m − 1)2 mk−1 .
La démonstration sera complète si nous montrons que Kk−1 (f D ||f˜k−1 ) = hD
k (et que
Kk (f D ||f˜k ) = hD
k+1 ). Mais il résulte de 3.2 que
X X
k−1
hD k
k (X) = H(X1 ) − H(X1 )=− f D (β) log f D (β) + f D (α) log f D (α)
β∈Ωk α∈Ωk−1
(a) X X X
=− f D (αω) log f D (αω) + f D (α) log f D (α)
ω∈Ω α∈Ωk−1 α∈Ωk−1
(b) X X
=− f D (α) f D (ω|α) log f D (ω|α)
α∈Ωk−1 ω∈Ω
3.5. RECONSTRUCTION DE MODÈLES DE MARKOV À PARTIR DES DONNÉES 83
Etant données les n observations xn1 , et sous l’hypothèse que le processus sous-jacent est une
chaîne de Markov d’ordre r,
– on détermine tout d’abord l’ordre k de la chaîne (avec k ≤ 12 ln ln n
m ) à l’aide du test 3.35.
– on estime ensuite les transitions théoriques correspondantes f M (ω|α) (avec ω ∈ Ω et
α ∈ Ωr ) par les transitions empiriques f D (ω|α) := n(αω) α (estimation de vraisemblance
maximale).
A ce stade, on est en position de simuler le processus de Markov en faisant tourner un processus
de k-ième ordre avec la matrice de transition f D (ω|α) à partir d’un état initial α ∈ Ωr tiré avec
la probabilité f D (α).
Exemple 3.21 Ecrite avec m = 27 états (l’alphabet + les espaces, sans ponctuation), la
version anglaise de la Déclaration Universelle des Droits de l’Homme constitue un texte xn1
de longueur n = 8′ 149 à partir duquel les distributions empiriques conditionnelles f D (ω|α)
peuvent être calculées. On peut imaginer que le texte a été produit par une chaîne de Markov
d’ordre r définie par l’ensemble de probabilités conditionnelles théoriques {f M (ω|α)} où α
est un r-gramme. Ces probabilités théoriques peuvent être estimées (estimation ML) d’après
les estimations empiriques correspondantes, soit f˜M (ω|α) := f D (ω|α), et, en raison de 3.34,
log n 1 log 8′ 149
l’estimation est garantie fiable pour r ≤ 21 log m = 2 log 27 = 1.36, qui est plutôt petit! Les
simulations basées sur f˜M (ω|α) = f D (ω|α) avec |ω| = r produisent:
r = 0 (Processus indépendant)
iahthire edr pynuecu d lae mrfa ssooueoilhnid nritshfssmo
nise yye noa it eosc e lrc jdnca tyopaooieoegasrors c hel
niooaahettnoos rnei s sosgnolaotd t atiet
Les transitions de premier ordre sont prises en compte, ce qui rend cet échantillon plus lisible
que le premier (en particulier, les transitions consonnes-voyelles sont respectées).
Le texte ressemble nettement à de l’anglais, avec des mots entiers reproduits correctement.
Cependant, nous sommes au-delà de la limite prudente de kmax = 1.36: le texte simulé
trahit son origine, à savoir la Déclaration Universelle des Droits de l’Homme, et non un autre
texte anglais original de taille comparable comme une recette culinaire ou un texte traitant de
mathématiques. De façon équivalente, les estimations de modèle f˜M (ω|α) = f D (ω|α) avec
|α| = 3 sont sur-paramétrées.
Tous les mots simulés sont à présents de véritables mots anglais, ce qui reflète la grande
redondance de l’anglais R ∼= 0.73 (voir exemple 3.5). Entre-temps, le problème de sur-
paramétrage empire....
Le sur-paramétrage a atteint des niveaux scandaleux d’après les standards statistiques: l’en-
semble {f M (ω|α)} de transitions d’ordre neuf (|α| = 9) contient (27 − 1) 279 = 6.1 × 1013
paramètres estimés d’après un texte de longueur n = 8.1 × 103 seulement! Par conséquence,
des morceaux entiers du texte original sont reproduits sans altération dans le texte simulé.
Évaluation 22
Histoire et bibliographie
Section 3.3.5. Le comportement irréversible a été reconnu clairement et officiellement pour
la première fois en Thermodynamique au milieu du XIXième siècle sous le nom de Se-
cond Principe de Thermodynamique, déclarant que « l’entropie (physique) d’un système
physique isolé non-équilibré augmente jusqu’à atteindre l’équilibre ». La formulation
moderne du second principe, en termes de théorie de l’information pure, est donnée
(dans le cadre des processus de Markov) par le théorème 3.9. Elle montre en particu-
lier que K(f (n) ||π) diminue jusqu’à zéro pour n → ∞. Si la distribution stationnaire
π est uniforme (c’est-à-dire πj = 1/m pour tout j = 1, . . . , m), alors K(f (n) ||π) =
log m − H(f (n) ) où H(f ) est l’entropie de Shannon de la distribution f : ici le théorème
3.9 confirme que H(f (n) ) augmente en effet dans n avec la limite log m. Mais dans le
cas général, où π n’est pas uniforme, le Second Principe devrait être exposé plus correc-
tement comme suit: « l’entropie relative (relativement à π) d’un système physique isolé
non-équilibré diminue jusqu’à ce que l’équilibre soit atteint ».
Section 3.5. La Déclaration Universelle des Droits de l’Homme a été adoptée par l’assemblée
générale de l’ONU (résolution 217 A (III)) du 10 décembre 1948.
Exercices du module C3
par F. BAVAUD
Exercice 4.1.1:
Une étudiante suivant un certain programme peut échouer à ses examens une fois; si elle échoue
deux fois, elle est éliminée du programme. Afin de formaliser le processus, considérons un mo-
dèle à cinq états Ω = {a, b, c, d, e} où a = « enregistrée dans le programme sans s’être encore
présentée », b = « première tentative réussie », c = « première tentative infructueuse, seconde
tentative à faire », d = « seconde tentative réussie » et e = « seconde tentative infructueuse
(éliminée) ».
A)
– dessinez le diagramme des transitions possibles entre les cinq états.
– quels états atteignent quels états ?
– quels états communiquent avec quels états ?
– énumérez toutes les classes récurrentes et transientes.
– énumérez tous les états absorbants.
B) Identifiez les états b et d (qui correspondent tous deux à une tentative réussie) et répondez
aux mêmes questions.
Exercice 4.1.2:
Considérons la table de changement d’opinion suivante N = (njk ), qui donne les effectifs
croisés de l’opinion de 493 Danois sélectionnés au hasard en ce qui concerne la CEE en Oc-
tobre 1971 (lignes j = 1, . . . , 3) par leur opinion envers la CEE en décembre 1973 (colonnes
87
88 CHAPITRE 4. EXERCICES DU MODULE C3
Introduction
Dans le chapitre précédent, nous avons introduit la mesure d’incertitude de Shannon et plu-
sieurs de ses propriétés. Cependant, nous n’avons pas encore montré à quel point cette mesure
peut être utile sur un plan pratique. Dans ce chapitre, nous présentons le premier exemple de
problème pratique qui tire avantage de la mesure de Shannon. Ce problème est celui du codage
d’une source d’information discrète à l’aide d’une séquence de symboles. Nous développons
également quelques méthodes efficaces pour effectuer de tels codages, puis nous étudions sous
quelles conditions de tel codages peuvent être efficaces. Dans le cadre précis des code non am-
bigus, l’entropie s’avère être la limite fondamentale à la compression de données, c’est-à-dire
qu’elle est fortement liée à la longueur moyenne de code minimale possible.
Mais demandons nous d’abord pour quelles raisons code-t-on une source ? Il y a en fait trois
raisons principales :
– coder pour compresser les données, c’est-à-dire pour réduire (en moyenne) la longueur des
messages.
Pour ce faire, il faut tenter de supprimer un maximum de redondance des messages.
89
90 CHAPITRE 5. CODAGE EFFICACE DE L’INFORMATION
Ut Zt
Source Codeur
F IG . 5.1 – Schéma de base pour le codage d’une source : le symbole Ut , émis par la source au
temps t, est transformé en un mot de code Zt .
En outre, seules les sources stationnaires∗ , c’est-à-dire les sources pour lesquelles P (Ut =
ui ) ne dépend pas de t, sont prises en considération dans ce chapitre. Dans un tel cas, et
lorsqu’il n’y a pas d’ambiguïté possible, P (U = ui ) sera dans la suite noté simplement pi .
Nous supposons que pi 6= 0 pour tout symbole considéré ui dans l’alphabet de la source ; ce
qui signifie que nous ne nous préoccupons pas des symboles de probabilité nulle.
En ce qui concerne le codeur, seul le cas le plus simple où un seul mot de code est associé
à chaque symbole-source est pris en considération. Techniquement parlant, le processus de
codage Z := f (U ) est une application de l’alphabet de la source VU à l’ensemble de mots de
code VZ .
Soit Z ∗ l’ensemble de toutes les séquences de longueur finie d’éléments de l’alphabet Z.
L’ensemble des mots de code VZ est un sous-ensemble de Z ∗ qui ne contient pas la chaîne
vide (c’est-à-dire la séquence de longueur 0).
En outre, nous nous concentrons sur les codes dans lesquels deux symboles différents de la
source correspondent à deux mots de code différents. Techniquement parlant, l’application f
est injective.
De tels codes, où Z = f (U ) est une application injective, sont appelés codes non-singuliers∗ .
Définition 5.1 (Code non-singulier) On dit que le code d’une source d’informa-
tion discrète est non-singulier lorsque deux symboles différents de la source cor-
respondent à deux mots de code différents.
Formellement, en notant zi le mot de code correspondant au symbole-source ui , nous
avons :
ui 6= uj =⇒ zi 6= zj .
Tous les codes pris en considération dans le reste de ce chapitre sont non-singuliers.
Puisqu’il n’y a pas de raison de créer des mots de code qui ne sont pas utilisés, c’est-à-dire
qui ne correspondent pas à un symbole de la source, l’application f de VU à VZ est surjective ;
c’est donc une bijection.
Exemple 5.1 (Codage d’une source finie) Un exemple de code très courant est celui du
code Morse. Ce code est utilisé pour coder des lettres usuelles. Il emploie essentiellement
deux symboles : un point (·) et un tiret (–).1 Par exemple, les lettres E, A et K sont respective-
ment codées «·», «· –» et «– · –».
Étant donné que nous ne nous intéressons pas uniquement au codage de symboles seuls, mais
également au codage de messages (c’est-à-dire des séquences de symboles), nous examinons
1
En réalité quatre symboles sont employés en Morse : des séparateurs de lettres et des séparateurs de mots sont
également utilisés.
92 CHAPITRE 5. CODAGE EFFICACE DE L’INFORMATION
des codes qui permettent de décoder chaque message individuellement. De tels codes sont
appelés des codes non-ambigus∗ .
Définition 5.2 (Codes non-ambigus) On dit que le code d’une source discrète est
non-ambigu si et seulement si chaque séquence (de longueur finie) de mots de code
ne correspond qu’à un seul message de la source. ¨
Plus formellement, on dit qu’un code est non-ambigu si et seulement si l’extension triviale fˆ de
l’application f à l’ensemble de messages VU∗ , prenant sa valeur dans l’ensemble de séquences
de mots de code de longueur finie VZ∗ (fˆ : VU∗ → VZ∗ ), est une bijection.
Exemple 5.2 (Code ambigu) Considérons la source composée des trois symboles a, b et
c. Ses messages peuvent être n’importe quelle séquence de ces symboles ; par exemple
«aabca» est un message de cette source.
Le codage suivant de cette source :
a 7→ 1 b 7→ 00 c 7→ 11
est ambigu.
Par exemple, une fois codés, il n’y a aucun moyen de distinguer le message «aaaa» du
message «cc». En effet, tous deux sont codés «1111».
Parmi les codes non-ambigus, certains présentent un intérêt particulier. Ce sont les codes sans
préfixe. Avant de définir ce qu’est un tel code, il nous faut introduire la notion de préfixe∗ .
On dit qu’une séquence z de longueur n (n ≥ 1) est un préfixe∗ d’une autre séquence z ′ si et
seulement si les n premiers symboles de z ′ forment exactement la séquence z. Par exemple,
abba est un préfixe de abbabc. Notez que toute séquence est trivialement son propre préfixe.
Définition 5.3 (Code sans préfixe) On dit que le code d’une source discrète est sans
préfixe lorsqu’aucun mot de code n’est le préfixe d’un autre mot de code.
Plus formellement, on dit qu’un code Z, dont l’alphabet est Z et dont l’ensemble de
mots de code est VZ , est sans préfixe si et seulement si
∀z ∈ VZ ∀y ∈ Z ∗ (zy ∈ VZ =⇒ y = ε)
Codes généraux
Codes non−singuliers
Codes non−ambigus
Codes instantanés
Exemple 5.4 (Code sans préfixe) Considérons la source composée des trois symboles a, b
et c.
Le code suivant de cette source :
a 7→ 0 b 7→ 10 c 7→ 11
est sans préfixe.
D’autre part, le code suivant :
a 7→ 1 b 7→ 00 c 7→ 10
n’est pas sans préfixe puisque 1 (le mot de code pour a) est un préfixe de 10 (le mot de code
pour c).
Pourquoi se focaliser sur des codes sans préfixe ? La réponse se trouve dans les deux propriétés
suivantes (5.1 et 5.2), qui soulignent leur intérêt.
Cependant, il est important de remarquer qu’il existe des codes non-ambigus qui ne sont pas
sans préfixe comme l’exemple 5.3 le montre.
Venons-en maintenant à la seconde propriété intéressante des codes sans préfixe.
Définition 5.4 On dit qu’un code est instantané∗ si et seulement si chaque mot de
code dans toute chaîne de mots de code peut être décodé dès que l’on a atteint sa fin.
¨
Cette définition garantit qu’il n’est ni nécessaire de mémoriser les mots de code reçus ni d’at-
tendre les suivants pour effectuer le décodage. Un tel code permet d’économiser du temps et
de l’espace dans le processus de décodage d’un message codé.
Jusqu’à présent, nous avons rencontré différents types de codes : non-singulier, non-ambigu,
instantané. La façon dont ces différents types de codes sont reliés les uns aux autres est résumée
sur la figure 5.2.
Évaluation 23
94 CHAPITRE 5. CODAGE EFFICACE DE L’INFORMATION
noeuds
intérieurs racine
profondeur
feuilles
ui 1 2 3 4
P (U = ui ) 0.5 0.25 0.125 0.125
Considérons donc le codage suivant de cette source, (où zi est le mot de code pour ui ) :
z1 z2 z3 z4
0 10 110 111
Évaluation 24
Afin d’étudier plus en détail les propriétés des codes instantanés, nous devons introduire plus
de définitions et formuler quelques théorèmes. Parmi ceux-ci, l’outil le plus utile à l’étude des
codes instantanés est sans doute les arbres n-aires.
Pour commencer, résumons le concept d’arbre, ainsi que les termes qui s’y rapportent (cf
figure 5.3). Un arbre est un graphe (nœuds et arcs) qui commence par un nœud de racine
(simplement «la racine»). Chaque nœud du graphe est soit une feuille soit un nœud intérieur.2
2
Notez que d’après cette définition, la racine d’un arbre non réduit à un seul nœud est aussi un nœud intérieur.
5.1. CODER UNE VARIABLE ALÉATOIRE 95
Un nœud intérieur a un ou plusieurs fils et est appelé le parent de ses fils. L’arité∗ d’un nœud
est le nombre de ses fils. Un nœud feuille est un nœud sans fils, soit un nœud d’arité 0.
Contrairement à un arbre réel, la racine est généralement représentée au sommet de la figure
98 CHAPITRE 5. CODAGE EFFICACE DE L’INFORMATION
D ÉMONSTRATION
=⇒ Supposons tout d’abord qu’il existe un code instantané D-aire dont les longueurs de
mots de code sont l1 , l2 , . . . , lN . Soit L := max li + 1. Considérons la construction de l’arbre
i
de codage correspondant Tcode consistant à élaguer Tcomplet ,3 l’arbre D-aire de profondeur L.
0 1
Tcode
Tcomplet 0 1 0 1
0 1 0 1 0 1 0 1
c’est-à-dire
N
X
D−li ≤ 1.
i=1
En outre, dans le cas où le code considéré est complet, tous les nœuds correspondent à un
mot de code ; donc tous les sous-arbres correspondants dans Tcomplet ont été «élagués», et, par
XN
L
conséquent, les D feuilles de Tcomplet ont été retirées. Ceci signifie que DL−li = DL ,
i=1
N
X
c’est-à-dire D−li = 1.
i=1
⇐= Inversement, supposons que l1 , l2 , . . . , lN soient des entiers positifs, de façon à ce
que (5.1) soit vérifiée. Soit L le plus grand de ces nombres L := max li , et nj le nombre de
i
ces li qui sont égaux à j (1 ≤ j ≤ L).
L
X L−1
X
−j L
L’inégalité peut donc être notée (5.1) nj D ≤ 1, c’est-à-dire nL ≤ D − nj DL−j .
j=1 j=1
Étant donné que nL ≥ 0, nous avons :
L−2
X
L
D nL−1 ≤ D − nj DL−j ,
j=1
5.1. CODER UNE VARIABLE ALÉATOIRE 99
c’est-à-dire
L−2
X
nL−1 ≤ DL−1 − nj DL−j−1 .
j=1
Et étant donné que tous les nj sont entiers, nous obtenons successivement, pour 0 ≤ k ≤
L−1
L−k−1
X
L−k
nL−k ≤ D − nj DL−j−k .
j=1
Ces inégalités constituent le point-clé de la construction d’un code avec des longueurs de
mots de code l1 , l2 , . . . , lN :
1. commençons par un nœud (la racine)
2. pour tout k de 0 à L :
(a) on assigne chaque mot de code à un nœud de profondeur courante (k) tel que
li = k. Ces nk nœuds deviennent donc des feuilles de l’arbre de codage.
(b) on étend tous les nœuds restants de profondeur courante avec D fils.
X
Ce faisant, le nombre de nœuds qui sont étendus à l’étape (2b) est Dk − nj Dk−j menant
j≤k
X
k+1 k+1−j
àD − nj D nouveaux nœuds pour l’étape suivante. En raison des inégalités
j≤k
précédentes, ce nombre est plus grand que nk+1 , laissant ainsi suffisamment de nœuds pour
l’étape suivante (2a).
L’algorithme peut donc toujours assigner des nœuds aux mots de code et construire ensuite
tout l’arbre de codage pour le code.
Par conséquent, si les li satisfont l’inégalité (5.1), nous sommes en mesure de construire un
code instantané avec les longueurs de mots de code correspondant aux li .
P
En outre, dans le cas où i D−li = 1, le nombre de nœuds restants après l’étape (2a) lorsque
j = L est
X N
X X
L L−j L
D − nj D =D − DL−li = DL (1 − D−li ) = 0,
j≤L i=1 i
ce qui signifie que tous les nœuds ont été affectés à un mot de code, c’est-à-dire que le code
est complet. ¥
Notez que cette démonstration de l’inégalité de Kraft contient un algorithme efficace pour la
construction effective d’un code D-aire instantané étant données des longueurs de mots de
code (lorsqu’un tel code existe).
5.2. CODAGE EFFICACE 103
D ÉMONSTRATION La probabilité de chaque nœud est égale à la somme des probabilités des
feuilles du sous-arbre issu de ce nœud. Donc la somme des probabilités des nœuds intérieurs
est une somme sur les probabilités des feuilles.
En outre, la probabilité d’une feuille apparaît dans cette somme exactement autant de fois
que la profondeur d de la feuille correspondante. En effet, une feuille à la profondeur d est
couverte par exactement d nœuds intérieurs : tous les nœuds qui sont sur le chemin de la
racine à cette feuille.
Ainsi, la somme des probabilités de tous les nœuds intérieurs est égale à la somme des pro-
duits de chaque probabilité de feuille et sa profondeur. Cette somme est précisément la défi-
nition de la profondeur moyenne des feuilles.
Plus formellement, soit νi , 1 ≤ j ≤ M le M des nœuds intérieurs et soit λj , 1 ≤ i ≤ N
les N feuilles. En outre, soit Pi la probabilité du nœud intérieur νi et pj la probabilité de la
feuille λj . Enfin, soit δ(λj ) la profondeur de la feuille λj . Dénotons par νi ≥ λj le fait que
le nœud intérieur νi couvre la feuille λj .
Alors la somme des probabilités des nœuds intérieurs est égale à :
XM XM X XN X XN X
Pi = pj = pj = pj 1 .
i=1 i=1 j:νi ≥λj j=1 i:νi ≥λj j=1 i:νi ≥λj
X
En outre, 1 n’est rien d’autre que le nombre de feuilles couvrant la feuille λj . Par
i:νi ≥λj
conséquent, X
1 = δ(λj )
i:νi ≥λj
et
M
X N
X
Pi = pj δ(λj ) =: E [δ] .
i=1 j=1
D ÉMONSTRATION Soit Z le code instantané en question. Par définition (d’un arbre de co-
dage), pi est la probabilité du ième mot de code et, par conséquent, Hfeuilles = H(Z).
En outre, étant donné que le code est non-singulier (Z = f (U ) est injective), H(Z) = H(U ).
Par conséquent, Hfeuilles = H(U ). ¥
Définition 5.12 Soit M le nombre de nœuds intérieurs d’un arbre n-aire probabilisé
et P1 , P2 , . . . , PM leurs probabilités. En outre, soient qi1 , qi2 , . . . , qini les probabilités
des ni fils (feuilles comprises) du ième nœud intérieur (dont la probabilité est Pi ).
L’entropie de branchement Hi à ce nœud est définie par
ni
X qij qij
Hi = − log , (5.5)
Pi Pi
j=1
Notez qu’en raison de la seconde propriété de la définition d’un arbre n-aire proba-
bilisé (definition 5.10), nous avons
ni
X
Pi = qij .
j=1
Exemple 5.13 Supposons que les M = 5 nœuds pour l’arbre des exemples 5.9, et 5.11,
page 5.11, soient numérotés de telle façon que P1 = 1, P2 = 0.3, P3 = 0.7, P4 = 0.3 et
P5 = 0.1.
Alors
5
X
Hfeuilles = − pi log pi ≃ 2.12 bit.
i=1
Nous vous laissons, à titre d’exercice, le soin de montrer que H3 ≃ 0.985 bit, H4 ≃ 0.918 bit,
H5 = 0.
5.2. CODAGE EFFICACE 105
Théorème 5.2 (Théorème de l’entropie des feuilles) L’entropie des feuilles d’un
arbre n-aire probabilisé est égale à la somme sur tous les nœuds intérieurs (racine
comprise) de l’entropie de branchement de ce nœud pondérée par sa probabilité. En
employant les notations définies ci-dessus :
M
X
Hfeuille = Pi Hi (5.6)
i=1
Exemple 5.14 Suite de l’exemple 5.13. Nous calculons Hfeuille par (5.6) pour obtenir
Théorème 5.3 Pour deux codes instantanés de la même source d’information, celui
qui a la longueur moyenne du code la plus courte a le plus haut taux d’entropie par
symbole.
En résumé, compresser les données sans perte d’information (i.e. code instantané) augmente
l’entropie par symbole.
Nous allons maintenant employer les résultats des sections précédentes pour obtenir une borne
inférieure fondamentale à l’espérance de la longueur de code d’un code instantané d’une source
d’information.
Borne inférieure à l’espérance de la longueur moyenne du code pour les codes instanta-
nés.
Théorème 5.4 (Théorème de Shannon sur le codage, 1ère partie) Pour toute
source d’information discrète sans mémoire d’entropie H(U ), l’espérance de la
longueur de code E [L] de tout code D-aire instantané pour cette source satisfait :
H(U )
E [L] ≥ , (5.7)
log D
La limite (5.7) aurait pu être anticipée de façon intuitive. Il faut H(U ) bits d’information pour
spécifier la valeur de U . Mais chaque chiffre D-aire du mot de code peut, d’après le théo-
rème 1.2 et la définition de l’information mutuelle (équation (1.17)), fournir tout au plus log D
bits d’information sur U . Nous aurons donc certainement besoin d’au moins H(U )/ log D
symboles de code en moyenne pour spécifier U .
106 CHAPITRE 5. CODAGE EFFICACE DE L’INFORMATION
D ÉMONSTRATION
N
X N
X
H(U ) log pi
E [L] − = pi l i + pi
log D log D
i=1 i=1
XN ³ ´
= pi − logD D−li + logD pi
i=1
N
X
Soit Q = D−li et qi = D−li /Q. On a alors :
i=1
N
X
H(U )
E [L] − = pi (− logD qi + logD pi − logD Q)
log D
i=1
ÃN !
X pi
= pi log − logD Q
qi
i=1
= K(pi , qi ) − logD Q
Évaluation 29
ui 1 2 3 4
P (U = ui ) 0.5 0.25 0.125 0.125
Considérons ensuite le codage suivant de cette source (où zi est le mot de code pour ui ):
z1 z2 z3 z4
0 10 110 111
Le théorème ci-dessus est le premier exemple pour lequel la réponse à une question technique
est naturellement exprimée en fonction de l’entropie de Shannon. Ceci n’est toutefois pas une
justification complète de l’utilisation de l’entropie, puisque seul un minorant a été spécifié.
5.2. CODAGE EFFICACE 107
Par exemple, la valeur «1» serait aussi un autre minorant à l’espérance de la longueur de code,
mais nous ne prétendrions pas que cette limite est une justification de quoi que ce soit! Ce n’est
que lorsque le minorant donné est, dans un sens, la meilleure borne inférieure possible, qu’il
peut être utilisé comme justification. Afin de montrer que la limite exprimée dans le théorème
ci-dessus est effectivement la borne inférieure, nous devons montrer qu’il existe des codes dont
l’espérance de la longueur de code peut être arbitrairement proche de celle-ci.
Nous montrons ici comment construire des codes instantanés «efficaces». Bien qu’ils ne soient
pas optimaux en général, ils sont suffisamment proches de la borne inférieure à l’espérance de
la longueur de code.
L’idée-clé est d’utiliser comme mot de code pour ui , un mot dont la longueur est
» ¼
log pi
li = − ,
log D
où ⌈x⌉ dénote pour tout x le seul entier tel que x ≤ ⌈x⌉ < x + 1.
Un tel code est appelé un code de Shannon-Fano. En effet, la technique est implicite dans
l’article écrit par Shannon en 1948, mais elle sera rendue explicite par Fano.
Mais un tel code instantané existe-t-il toujours ? La réponse est «oui» en raison de l’inégalité
de Kraft.
En effet, étant donné que par définition li ≥ − log pi
log D , nous avons
X X log pi X X
D−li ≤ D log D = DlogD pi = pi = 1.
i i i i
Mesurons à quel point un tel code est «bon» en termes de son espérance de la longueur de
code. Par définition de li nous avons :
log pi
li < − + 1. (5.8)
log D
c’est-à-dire
H(U )
E [L] < + 1. (5.10)
log D
Nous voyons que le code de Shannon-Fano a une espérance de longueur de code qui est à l’in-
térieur d’un symbole de la borne inférieure (5.7) valable pour tous les codes instantanés. Ce
code est donc plutôt bon. En effet, d’après la première partie du théorème de codage vu précé-
demment, nous savons qu’aucun code instantané ne peut «battre» l’espérance de la longueur de
code du code de Shannon-Fano de plus d’un symbole. Par conséquent, lorsque l’entropie de la
source codée H(U ) est grande, le codage de Shannon-Fano est presque optimal. Mais lorsque
H(U ) est petite, nous pouvons généralement faire bien mieux que le codage de Shannon-Fano,
comme nous le discuterons dans la section suivante.
Concentrons-nous à présent sur la seconde partie du premier théorème de codage de Shannon.
108 CHAPITRE 5. CODAGE EFFICACE DE L’INFORMATION
Théorème 5.5 (Théorème de codage de Shannon, 2ème partie) Pour toute source
d’information discrète sans mémoire d’entropie H(U ), il existe au moins un code
instantané D-aire dont l’espérance de la longueur de code E [L] satisfait :
H(U )
E [L] < + 1. (5.11)
log D
Nous construisons donc le code par l’algorithme donné dans la démonstration de l’inégalité
de Kraft, pour obtenir le code dont l’arbre binaire est
0 1
0 1 0 1
u1 u2
1
u3
0 1
u4
H(U ) = 0.4 log 0.4 + 0.3 log 0.3 + 0.2 log 0.2 + 0.1 log 0.1 ≃ 1.8 bit.
Évaluation 30
Considérons une source U dont l’entropie est 2.15 bit. Pour les valeurs suivantes : 2.75, 2.05,
3.25, 2.15, pensez-vous qu’il existe un code binaire instantané de U avec une telle espérance de
longueur de code ? Pensez-vous qu’il peut exister un meilleur code, soit un autre code binaire
instantané de U avec une espérance de longueur de code plus courte ? (oui, non, ou peut-être)
5.2. CODAGE EFFICACE 109
Nous montrons ici comment construire un code instantané D-aire pour une source d’informa-
tion discrète sans mémoire U avec n symboles. L’algorithme pour la construction d’un tel code
optimal est le suivant:
1. Choisissez n nœuds (qui seront finalement les feuilles de l’arbre de codage) correspon-
dant aux n symboles de la source u1 , u2 , . . . , un .
Assignez la probabilité pi au nœud ui pour 1 ≤ i ≤ n.
Marquez ces n nœuds comme «actifs».
Calculez le reste r de la division de 1 − n par D − 1. Notez que, bien que 1 − n soit
négatif, r est positif par définition d’un reste.
Notez également que dans le cas binaire (D = 2), r est toujours nul.
2. Groupez, en tant que fils d’un nœud nouvellement créé, les D − r nœuds actifs les moins
probables et les r nœuds (feuilles) inutilisés:
nouveau
noeud
... ...
... ...
D−r feuilles r feuilles
utiles inutiles
Marquez les D − r nœuds actifs comme «non actifs» et le nœud nouvellement créé
comme «actif».
Assignez au nœud nouvellement créé une probabilité égale à la somme des probabilités
des D − r nœuds qui viennent d’être désactivés.
3. S’il n’y a qu’un seul nœud actif, arrêtez (ce nœud est alors la racine de l’arbre de codage).
Autrement, posez r = 0 et retournez à l’étape 2.
Le code instantané résultant d’un tel algorithme de codage est appelé un code de Huffman∗ ,
puisque l’algorithme simple décrit ici fut découvert par D. Huffman dans les années cinquante.
U u1 u2 u3 u4 u5 u6
pi 0.05 0.1 0.15 0.27 0.20 0.23
0 1
0 1 0 1
u
z1 z2 z3 z4 z5 z6
0 1 4 u5 u6
0000 0001 001 01 10 11
0 1 u3
u1 u2
v1 = u 1 ⊕ u 2 v2 = v1 ⊕ u 3 v3 = u 5 ⊕ u 6 v4 = v2 ⊕ u 4 v5 = v4 ⊕ v 3
0.15 0.30 0.43 0.57 1
Enfin, notez que E [L] = 2 (0.2 + 0.23 + 0.27) + 3 (0.15) + 4 (0.1 + 0.05) = 2.45 (ou par
le lemme de la longueur de chemin : E [L] = 1 + 0.57 + 0.43 + 0.30 + 0.15 = 2.45), et
X6
H(U ) = − pi log pi = 2.42 bit.
i=1
Exemple 5.17 (Codage ternaire de Huffman) Pour la même source U de l’exemple précé-
dent et en employant un code ternaire (D = 3), nous avons pour le reste de 1 − n := 1 − 6 =
−5 par D − 1 := 2: r = 1. En effet, −5 = −3 · 2 + 1. Donc une feuille inutilisée doit être
introduite.
Le code ternaire de Huffman est dans ce cas :
a b c
u6 u4
a z1 z2 z3 z4 z5 z6
b c
u3 u5
aab aac ab c ac b
a
b c
u1 u2
v1 = u 1 ⊕ u 2 v2 = v1 ⊕ u 3 ⊕ u 5 v3 = v2 ⊕ u 6 ⊕ u 4
0.15 0.50 1
Enfin, notez que E [L] = 1 + 0.5 + 0.15 = 1.65 (par le lemme de la longueur de chemin), et
H(U ) 2.42
log 3 = 1.59 = 1.52.
Évaluation 31
1 2 3 4 5 6
0.17 0.12 0.10 0.27 0.18 0.16
Le but de cette question est de construire un code de Huffman binaire pour ce dé. Pour ce code,
par convention, nous donnerons l’étiquette 0 à la branche la moins probable et l’étiquette 1 à
la branche la plus probable. En outre, les nouveaux nœuds introduits seront appelés 7, 8, etc...,
dans cet ordre.
1. Quels sont les deux premiers nœuds à être regroupés ? Quelle est la probabilité corres-
5.2. CODAGE EFFICACE 111
pondante ?
2. Quels sont donc les deux nœuds suivants à être regroupés ? Quelle est la probabilité
correspondante ?
3. Continuez à donner les noms des deux nœuds à regrouper et la probabilité correspon-
dante.
4. Donnez le code de Huffman trouvé pour cette source :
ui = 1 2 3 4 5 6
zi =
Nous voulons maintenant démontrer que le codage de Huffman est optimal en ce sens qu’aucun
autre code instantané ne peut avoir une espérance de longueur de code strictement inférieure à
celle résultant du codage de Huffman.
Cependant, il est important de ne pas oublier qu’il existe plusieurs codes optimaux : permuter
les symboles-codes ou échanger deux mots de code de la même longueur donnera un autre
code avec la même longueur moyenne. L’algorithme de Huffman ne construit qu’un seul code
optimal.
Avant de prouver l’optimalité des codes de Huffman, nous devons donner quelques propriétés
des codes optimaux en général.
n
X
Un code est optimal si la longueur moyenne pi li est minimale parmi tous les codes ins-
i=1
tantanés possibles de la même source, dénotant li la longueur du mot de code correspondant
au symbole ui .
Lemme 5.2 Pour le code optimal d’une source d’information avec n symboles pos-
sibles, nous avons : ∀i(1 ≤ i ≤ n) ∀j(1 ≤ j ≤ n) pi > pj =⇒ li ≤ lj .
Parce que Z est optimal, E [LY ] ≥ E [LZ ]. Par conséquent, si pi > pj , lj −li doit être positif.
¥
Lemme 5.3 (Lemme de comptage des nœuds) Le nombre de feuilles dans un arbre
D-aire est 1 + M · (D − 1) où M est le nombre de nœuds intérieurs (racine incluse).
112 CHAPITRE 5. CODAGE EFFICACE DE L’INFORMATION
D ÉMONSTRATION Chaque nœud intérieur a D fils, donc le nombre total de nœuds de l’arbre
qui sont les fils d’un autre nœud est M · D. Le seul nœud de l’arbre à ne pas être le fils d’un
autre nœud est la racine. Le nombre total de nœuds de l’arbre est donc M · D + 1.
Mais par définition, il y a M nœuds intérieurs, donc le nombre de feuilles (c’est-à-dire le
nombre de nœuds qui ne sont pas des nœuds intérieurs) est
M · D + 1 − M = 1 + M · (D − 1).
D ÉMONSTRATION S’il y a au moins une feuille inutilisée qui n’est pas à la longueur maxi-
male, l’espérance de la longueur de code peut être diminuée en transférant à cette feuille
inutilisée l’un des mots de code de profondeur maximale. Le code original ne serait donc pas
optimal.
En outre, s’il y a plus de D feuilles inutilisées à profondeur maximale, au moins D de ces
nœuds inutilisés peuvent être regroupées en tant que fils du même nœud et remplacés par cet
unique nœud inutilisé qui est à une profondeur réduite de 1. Par conséquent, s’il y a plus de
D feuilles inutilisées, le code ne peut pas être optimal.
Enfin, s’il y a exactement D − 1 feuilles inutilisées à profondeur maximale, elles peuvent
être regroupées en tant que fils du même parent. Celui-ci a également une feuille utile qui est
son dernier fils. Mais on peut raccourcir le code en retirant simplement ce dernier symbole
inutile. En effet, ce dernier symbole n’est pas discriminant puisque tous ses nœuds frères sont
des nœuds inutiles. ¥
Lemme 5.5 Le nombre de feuilles inutilisées dans l’arbre d’un code D-aire instan-
tané optimal pour une source d’information discrète U avec n symboles possibles est
le reste (positif) de la division de 1 − n par D − 1.
r = [1 + M (D − 1)] − n,
ou
1 − n = −M (D − 1) + r.
5.2. CODAGE EFFICACE 113
En outre, d’après le lemme 5.4, nous savons que si le code est optimal, 0 ≤ r < D − 1 . Il
résulte donc du théorème de la division euclidienne que r est le reste de la division de 1 − n
par D − 1 (le quotient étant −M ). ¥
Lemme 5.6 Il existe un code D-aire instantané optimal pour une source d’informa-
tion discrète U avec n symboles différents (n ≥ 2) tels que les D − r mots de code les
moins probables diffèrent uniquement dans leur dernier chiffre, avec r comme reste
de la division de 1 − n par D − 1 (donc D − r ≥ 2).
D ÉMONSTRATION Notez tout d’abord que nous ne prétendons pas que tous les codes opti-
maux satisfont cette propriété, mais qu’en réarrangeant un code optimal existant, nous pou-
vons trouver au moins un code optimal qui satisfasse la propriété.
Considérons un code D-aire instantané optimal pour U (ceci existe puisque le nombre de
codes D-aires instantanés pour U est fini). D’après le lemme 5.5, nous savons qu’il y a r
feuilles inutilisées. D’après le lemme 5.4, elles sont toutes de profondeur maximale. Consi-
dérons les D − r frères de ces feuilles inutilisées. Ils représentent les plus grandes longueurs
de mots de code (puisqu’ils sont de profondeur maximale).
Construisons à présent le code où nous échangeons ces D − r plus longs mots de code contre
les D − r les moins probables. En raison du lemme 5.2, ceci ne change pas la longueur
moyenne (sans quoi le code en question n’aurait pas été optimal). Donc le code obtenu est
également optimal. Mais en ce qui concerne ce dernier code, nous sommes sûrs que les D − r
mots de codes les moins probables diffèrent uniquement dans leur dernier symbole. ¥
En raison du lemme 5.6, il suffit de chercher un code optimal dans la catégorie des codes où
les D − r mots de code les moins probables diffèrent uniquement dans leur dernier symbole.
Établissons à présent l’optimalité du codage de Huffman.
Théorème 5.6 Le codage de Huffman est optimal : si Z est le code de Huffman d’une
source d’information U et X un autre code non-ambigu pour U , alors E [LX ] ≥
E [LZ ].
n
X
Étant donné que pi est indépendant du processus de codage (il ne dépend que
i=n−D+r+1
de la source U ), en raison du lemme 5.6 et du fait que Y , par hypothèse de récurrence, est
optimal pour V (qui a moins de n symboles), nous concluons que Z est optimal pour U
(c’est-à-dire que E [LZ ] est minimal). ¥
R ÉSUMÉ DU CHAPITRE 5
Codes instantanés:
– aucun mot n’est le préfixe d’un autre
– instantané =⇒ non-ambigu =⇒ non-singulier
– sans préfixe ≡ instantané
P −li
Inégalité de Kraft: ∃ code D-aire instantané ⇐⇒ iD ≤1
Limite de l’entropie à la longueur moyenne d’un code instantané :
X H(U )
E [L] = pi l i ≥
log D
i
Code de Shannon-Fano: »¼
log pi
li = −
log D
X H(U )
E [L] = pi l i < +1
log D
i
5.2. CODAGE EFFICACE 115
Code de Huffman:
1. introduit 1 − n mod (D − 1) feuilles inutilisées avec la probabilité 0
2. regroupe récursivement les nœuds les moins probables
3. est optimal (en ce qui concerne l’espérance de la longueur de code) dans la caté-
gorie des codes non-ambigus
Histoire et bibliographie
Ce chapitre n’aborde que le cas de sources sans mémoire. Cependant, dans la plupart des cas
de la vie réelle, comme par exemple la compression de données sur ordinateur, les sources
considérées sont rarement sans mémoire. La question de la compression de sources avec des
dépendances intérnes est abordée dans le chapitre 7.
Pour plus de détails sur le codage de compression, veuillez vous référer à [8].
116 CHAPITRE 5. CODAGE EFFICACE DE L’INFORMATION
Chapitre 6
Exercices du module C2
Exercice 6.1.1:
ui 1 2 3 4 5
P (U = ui ) 0.125 0.25 0.025 0.5 0.1
Considérez ensuite le codage ci-dessous (où zi est le mot de code pour ui ) de cette source :
z1 z2 z3 z4 z5
01 111 110 10 00
Exercice 6.1.2:
Pour les codes suivants, déterminez si le code est sans préfixe, et/ou non-ambigu. Si le code
est sans préfixe, dessinez l’arbre de codage correspondant. Si le code est ambigu, donnez une
séquence de symboles qui pourraient être décodés en deux messages-sources différents.
117
118 CHAPITRE 6. EXERCICES DU MODULE C2
Exercice 6.1.3:
a- Existe-t-il un code binaire sans préfixe ayant pour longueurs de ses mots code :
l1 l2 l3 l4 l5 l6 l7 l8 l9 l10
2 3 3 2 3 4 2 3 2 2
Justifiez votre réponse.
b- Quelle est la taille minimale de l’alphabet pour un tel code ?
c- Dans le cas minimal, dessinez un arbre de codage possible correspondant à ce code.
Exercice 6.2.1:
U u1 u2 u3 u4 u5 u6 u7 u8
pU 1/4 1/8 1/8 1/16 1/16 1/16 5/32 5/32
Exercice 6.2.2:
Le code considéré dans l’exercice 6.1.1 est-il un code efficace, c’est-à-dire optimal du point de
vue de la longueur moyenne de code ?
6.2. CODAGE EFFICACE 119
Exercice 6.2.3:
1 2 3 4 5 6
0.17 0.15 0.16 0.22 0.18 0.12
Exercice 6.2.4:
char. (space) E T A O I N S
proba. 0.1859 0.1031 0.0796 0.0642 0.0632 0.0575 0.0574 0.0514
char. R H L D U C F M
proba. 0.0484 0.0467 0.0321 0.0317 0.0228 0.0218 0.0208 0.0198
char. W Y G P B V K X
proba. 0.0175 0.0164 0.0152 0.0152 0.0127 0.0083 0.0049 0.0013
char. J Q Z
proba. 0.0008 0.0008 0.0005
a– Calculez l’entropie de l’anglais, dans le sens d’une source d’information générant des sé-
quences indépendantes à partir de l’alphabet ci-dessus.
b– Construisez un code de Huffman binaire pour la source ci-dessus.
c– Quel est le taux de compression maximal que l’on peut espérer pour la source ci-dessus
(considérée comme une source sans mémoire) en utilisant des codes sans préfixe ?
Exercice 6.2.5:
L’objectif de cet exercice est d’illustrer le fait que les principes de codage efficaces peuvent
être appliqués à divers domaines, y compris à la théorie de la décision.
On vous donne 9 pièces de monnaie et une balance à deux plateaux non biaisée. Parmi ces 9
pièces, une est de poids différent. Le problème est de trouver la pièce différente en effectuant
un nombre minimal de pesées et de dire si elle est plus lourde ou plus légère que les autres.
120 CHAPITRE 6. EXERCICES DU MODULE C2
Exercice 6.2.6:
121
122 CHAPITRE 7. COMPLÉMENTS AU CODAGE EFFICACE DE L’INFORMATION
7.1.1 Introduction
Les mots de code de longueur variable considérés dans le chapitre 5 ne conviennent pas tou-
jours en pratique. Si les mots de code doivent, par exemple, être stockés en mémoire, les mots
de code dont la longueur est égale à la longueur des mots de la mémoire (c.-à-d. 8, 16 ou 32
bits) sont certainement préférables. Toutefois, c’était précisément la variabilité de la longueur
des mots de code qui faisait l’efficacité des codes présentés dans le chapitre 5 ! La question
est alors : est-il possible d’obtenir une efficacité de codage similaire lorsque l’on force tous les
mots de code à avoir la même longueur ? La réponse est oui, à condition que les mots de code
ne soient plus assignés à des blocs de longueur fixe de symboles de la source mais plutôt à des
blocs de longueur variable de symboles de la source, c.-à-d. qu’une segmentation à longueur
variable de la source doit être effectuée. De tels codes sont appelés « codes de longueur fixe » :
les mots de code D-aires ont tous la même longueur n, mais la longueur LV , des messages V
auxquels les mots de code sont assignés, est une variable aléatoire.
Étant donné que n/E [LV ] est le nombre moyen de signes de code D-aires par symbole de la
source, le critère d’optimalité d’un tel code devient E [LV ], la longueur moyenne de message
codé ; qui doit être rendue aussi grande que possible.
n o
Exemple 7.1 (Ensemble Propre) L’ensemble a, b, ca, cb, cc est un ensemble propre.
n o n o
Les ensembles a, b, ca, cb et aa, ac, b, cb, cc ne sont pas des ensembles propres.
Voici les arbres de codage correspondants :
a b c a b c a b c
a b c a b c a b c a b c
Évaluation 32
Pour chacun des ensembles suivants, décidez si l’ensemble est un ensemble propre ou pas :
7.1. CODES DE LONGUEUR FIXE : CODE DE TUNSTALL 123
Théorème 7.1 L’incertitude H(V ) d’un ensemble propre V pour une source d’in-
formation sans mémoire discrète D-aire, dont l’incertitude est H(U ), satisfait :
Nous pouvons maintenant voir comment le théorème de codage sans bruit de Shannon (par-
tie 1) s’applique aux ensembles propres de sources d’information sans mémoire :
Théorème 7.2 Pour tout code instantané D-aire Z de tout ensemble propre de mes-
sages V pour une source d’information discrète sans mémoire U , le rapport de la
longueur moyenne de mot de code E [LZ ] sur la longueur moyenne de message codé
E [LV ], satisfait
H(U ) E [LZ ]
≤
log D E [LV ]
où H(U ) est l’incertitude d’un seul symbole de la source.
H(V )
≤ E [LZ ] ,
log D
124 CHAPITRE 7. COMPLÉMENTS AU CODAGE EFFICACE DE L’INFORMATION
donc :
H(U )
E [LV ] ≤ E [LZ ] .
log D
La section suivante examine la procédure efficace pour construire des codes de longueur fixe
efficaces, mais nous avons tout d’abord besoin d’une autre définition ; ce qui est le sujet de
cette section.
0.7
0.3
0.7 0.3 0.49
0.21
0.09
0.343
0.49 0.21 0.21 0.147
Les ensembles de messages de Tunstall sont des codes de longueur fixe optimaux, c.-à-d.
qu’ils fournissent un maximum de longueur de message codé moyenne, comme stipulé par
le théorème suivant :
D ÉMONSTRATION Prouvons tout d’abord que si un ensemble propre n’est par un ensemble
de Tunstall, il ne peut dès lors pas maximiser la longueur de message codé moyenne.
Soit W un ensemble propre qui n’est pas un ensemble de Tunstall. Il existe alors dans l’arbre
de codage correspondant une feuille w et un nœud interne n∗ tels que
Considérons ensuite l’arbre de codage obtenu par déplacement du sous-arbre situé en-dessous
7.1. CODES DE LONGUEUR FIXE : CODE DE TUNSTALL 125
n*
0.7 0.3 0.7
0.3
0.49 0.09
0.49 0.09 0.21 0.21
w 0.21 0.21
0.343 0.147 0.063 0.027
0.063 0.027
0.103 0.044
P P
Il faut noter que les deux sommes n∈N (T ′ ) p(n) et n∈N (T ) p(n) ont le même nombre
′
P termes (puisque T et T ont même arité P
de et même nombre de feuilles) et donc
′
w∈N (T )∩F (T ) p(w) · (1 + · · · ) (dévelopée) et «les autres» n∈N (T ) p(n) ont également le
126 CHAPITRE 7. COMPLÉMENTS AU CODAGE EFFICACE DE L’INFORMATION
∀n ∈ N (T ) ∀w ∈ F (T ) p(t) ≥ p(w),
et donc : X X
p(n) ≥ p(w) · (1 + · · · )
«les autres» n∈N (T ) w∈N (T ′ )∩F (T )
(ces deux sommes ayant autant de termes, chacun des termes de la première pouvant être
apparié (bijection) à un terme plus petit (ou égal) de la seconde).
D’où : X X
p(n) ≥ p(n)
n∈N (T ) n∈N (T ′ )
Soit n la taille désirée des mots de code, et soient DU et DZ respectivement l’arité de la source
U et l’arité du code Z. Le nombre maximal de mots de code est alors DZ n .
Nous voulons construire un ensemble de Tunstall de taille M pour U (M ≤ DZ n ), c.-à-d. que
nous cherchons (entre autres) un code complet, c.-à-d. sans feuilles inutiles (ensemble propre).
Nous devons donc avoir M de la forme (voir lemme 5.3) :
M = 1 + k (DU − 1)
k boucles :
1) prolonger la racine
Évaluation 33
Nous cherchons un code de longueur fixe binaire à 4 bits optimal de la source ternaire, dont
les probabilités des symboles sont P (U = a) = 0.6, P (U = b) = 0.3 et P (U = c) = 0.1.
code de longueur fixe : codage de blocs de longueur variable de la source d’information par
des mots de code qui ont tous la même taille.
ensemble propre : un ensemble complet de feuilles d’un arbre de codage (pas de feuilles
inutiles).
ensemble de Tunstall : un ensemble propre tel que chaque nœud de l’arbre de codage cor-
respondant soit au moins aussi probable que n’importe laquelle de ses feuilles.
optimalité des ensembles de Tunstall : un ensemble propre maximise la longueur de mes-
sage codé moyenne si et seulement si c’est un ensemble de Tunstall.
n
algorithme de Tunstall : k = ⌊ DDZU −1
−1
⌋,M = 1 + k (DU − 1), prolonger k fois le nœud le
plus probable.
n 1 2 3 4 5 6 7 8
Z0 (n) 1 10 11 100 101 110 111 1000
ce qui est assez proche de l’optimum théorique dans le cas le plus général (log2 n).
Ce code souffre toutefois d’un inconvénient majeur : il est loin d’être instantané. En fait, chaque
mot de code Z0 (n) est le préfixe d’infiniment beaucoup d’autres mots de code !
La première idée émise par Elias fut d’ajouter un code de longueur |Z0 (n)| devant Z0 (n) pour
rendre le code instantané. Le code finalement proposé consiste à ajouter |Z0 (n)| − 1 zéros
devant Z0 (n). Voici un exemple de ce code, que nous appelons Z1 :
n 1 2 3 4 5 6 7 8
Z1 (n) 1 010 011 00100 00101 00110 00111 0001000
Z1 est maintenant un code instantané. Sa longueur est toutefois loin de celle désirée : il est
deux fois plus long :
|Z1 (n)| = 2⌊log2 n⌋ + 1
7.2. CODAGE DES ENTIERS POSITIFS 129
Le « truc » intelligent utilisé par Elias pour se débarrasser de cet inconvénient fut de changer
le codage de la longueur fait par des zéros en le code Z1 de cette longueur. Un mot de code est
ainsi fait de l’enchaînement de Z1 (|Z0 (n)|) et de Z0 (n).
Par exemple, 7 est codé en 111 par Z0 , ayant ainsi une longueur de 3. Ceci donne le préfixe
Z1 (3) =011, et 7 est donc codé en 011111 (=011,111). Voici d’autres exemples :
n 1 2 3 4 5 6 7 8
Z2′ (n) 11 01010 01011 011100 011101 011110 011111 001001000
Notez que Z0 (n) commence toujours avec un 1, qui n’est maintenant plus requis pour éviter
l’ambiguïté. On peut donc se débarrasser de ce 1 inutile. Ceci nous mène au code d’Elias final
pour les entiers, désigné ici par Z2 :
n 1 2 3 4 5 6 7 8
Z2 (n) 1 0100 0101 01100 01101 01110 01111 00100000
– et pour le préfixe :
|Z1 (|Z0 (n)|)| = 2⌊log2 (⌊log2 n⌋ + 1)⌋ + 1
Donc :
Il est assez remarquable qu’Elias ait trouvé un code binaire sans préfixe pour les entiers, dont
la longueur est assez proche de l’optimum log2 n, et qui est de plus facilement implémentable.
Évaluation 34
Les codes d’Elias sont des codes binaires instantané pour les entiers, dont la longueur est
(asymptotiquement) proche de l’optimum log2 (n).
Ces codes résultent de l’enchaînement d’un préfixe, fait du premier code d’Elias de la lon-
gueur de la représentation binaire habituelle du nombre à coder, et d’un suffixe, fait de
la représentation binaire habituelle sans son bit le plus significatif.
130 CHAPITRE 7. COMPLÉMENTS AU CODAGE EFFICACE DE L’INFORMATION
Exemple 7.4 Considérons, comme exemple d’une source avec des dépendances internes,
la « source oscillante » U consistant en une source binaire stationnaire telle que pU (0) =
pU (1) = 0.5 et :
(et pas d’autres dépendances à plus long terme), c.-à-d. P (Ui |Ui−1 ...U1 ) = P (Ui |Ui−1 ),
sinon au moins une des équations ci-dessus ne serait pas vérifiée).
L’entropie d’un symbole seul de cette source est clairement H(U ) = 1 bit. Qu’en est-il du
taux d’entropie ?
où e
h(p) est l’entropie d’une variable aléatoire binaire de paramètre p :
132 CHAPITRE 7. COMPLÉMENTS AU CODAGE EFFICACE DE L’INFORMATION
Rn (v) est donc le nombre de symboles reçus au temps n depuis la dernière réception
de v (avant n).
Pour que le compte de précédence soit défini pour chaque n possible (même les
premiers), une convention doit être choisie pour donner une valeur d’index initiale
à tous les symboles possibles. ¨
Définition 7.4 (Suite des (compte de) précédences) La suite des précédences N
associée à un processus aléatoire V est le processus aléatoire défini par Nn =
Rn (Vn ). ¨
vn Rn (0) Rn (1) Nn
0 2 1 2
1 1 2 2
0 2 1 2
1 1 2 2
1 2 1 1
0 3 1 3
1 1 2 2
0 2 1 2
1
Elias-Willems utilise en fait le rang dans les comptes de précédence, qui est généralement plus petit que le
compte de précédence mais n’affecte par les résultats généraux présentés ici.
7.3. CODAGE DE SOURCES À MÉMOIRE 133
Évaluation 35
Considérant une source binaire avec des symboles à un bit et la convention que 0 a l’index par
défaut initial -1 et 1 0, quelle est la suite des précédences pour la séquence source correspon-
dante : 0001101000111 ?
Évaluation 36
Considérant une source binaire avec des symboles à un bit et la convention que 0 a l’index par
défaut initial -1 et 1 0, quelle est la séquence source correspondant à la suite des précédences :
1,3,1,3,1,3,2,2 ?
Voici maintenant une propriété qui nous sera utile pour apprécier l’efficacité du schéma d’Elias-
Willems.
Prouvons maintenant que le code d’Elias du compte de précédence effectue un code qui est
asymptotiquement efficace, c.-à-d. tendant asymptotiquement vers l’optimum théorique donné
par le théorème 7.4.
Théorème 7.5 La longueur moyenne E [|Z2 (N )|] d’un code d’Elias-Willems avec
des blocs de taille k d’une source stationnaire U vérifie :
E [|Z2 (N )|] c 2 ck (U ) + 1) + 1
h∞ (U ) ≤ ≤ hk (U ) + log2 (k · h
k k k
Corollaire 7.1 La longueur moyenne E [|Z2 (N )|] d’un code d’Elias-Willems avec
des blocs de taille k d’une source stationnaire U vérifie :
E [|Z2 (N )|]
lim = h∞ (U )
k→∞ k
E [|Z2 (Ri (v))|] ≤ log2 (Ri (v)) + 2 log2 (log2 (Ri (v)) + 1) + 1
et de la propriété 7.1
X X
E [|Z2 (N )|] ≤ − pV (v) log2 (pV (v)) + 2 pV (v) log2 (1 − log2 (pV (v))) + 1
v∈VV v∈VV
ck (U ), donc :
Notez finalement que H(V ) = H(U (k) ) = H(U1 , ..., Uk ) = k · h
E [|Z2 (N )|] c 2 1
≤ hk (U ) + log2 (k · hk (U ) + 1) +
k k k
Évaluation 37
L’idée du très populaire codage de Lempel-Ziv est assez similaire à celle du schéma de codage
d’Elias-Willems : en utilisant des idées similaires à celle de compte de précédence, il vise aussi
à être universel, c.-à-d. à bien fonctionner pour différents types de sources stationnaires sans
connaître précisément toutes leurs propriétés statistiques.
7.3. CODAGE DE SOURCES À MÉMOIRE 135
Ces algorithmes sont les algorithmes de compression les plus utilisés en pratique (p.ex. en zip,
compress, gzip, ...). Les raisons principales sont que ces algorithmes donnent de manière
efficace un bon taux de compression. Ces algorithmes sont en effet linéairement complexes et
n’exigent que peu de mémoire.
Dans cette section, nous nous concentrons sur le noyau de ces algorithmes de compression en
présentant le plus simple d’entre-eux : LZ77.
Pour ce code, les mots de code sont des uplets (i, j, u). i et j sont des nombres entiers et u est
un symbole de la source.
Le mot de code (i, j, u) représente une séquence de symboles qui peuvent être obtenus à partir
de la séquence courante
– en copiant j symboles en partant depuis i positions en arrière
– et en ajoutant le symbole u à la fin.
Si i est nul, j est ignoré.
Exemple 7.7 (Mot de code LZ77) Par exemple, si la séquence courante décodée est
10010, le mot de code (3, 2, 1) représente la séquence 011 : en copiant 2 symboles (01) en
partant de 3 positions en arrière (10|010), et en ajoutant 1 à la fin.
Si j est plus grand que i, la copie du caractère continue avec les caractères nouvellement
copiés (c.-à-d. que le tampon débutant à i positions en arrière est cyclique).
Par exemple, si la séquence courante décodée est 10010, le mot de code (3, 5, 1) représente
la séquence 010011 : en partant de trois positions en arrière (10|010) en copiant cinq
symboles : d’abord les trois symboles existant déjà en i = 3 positions en arrière (010), ce qui
donne 10010|010, et en continuant avec les deux caractères suivants, 01 depuis le caractère
nouvellement ajouté, ce qui donne 1001001001. Le décodage se termine finalement par
l’addition du 1 (dernier élément du mot de code) à la fin, ce qui donne 10010010011.
En résumé : 10010 + (3, 5, 1) = 10010010011.
L’algorithme de codage correspondant, qui utilise un tampon à fenêtre glissante pour se rappe-
ler du contexte passé, est le suivant :
1. chercher dans le contexte courant (c.-à-d. le début de la séquence restant à coder) la
séquence la plus courte qui n’est pas encore dans le tampon ;
2. retirer le dernier caractère u de cette séquence inobservée et chercher dans le tampon la
séquence correspondante la plus proche ;
3. émettre les position en arrière (i) et longueur (j) correspondantes, suivies par le dernier
caractère retiré (u)
4. mettre à jour le tampon (avec la séquence nouvellement codée) et retourner en 1 tant
qu’il reste une entrée.
Voici un exemple ce cet algorithme de codage :
Évaluation 38
7.3. CODAGE DE SOURCES À MÉMOIRE 137
Évaluation 39
En quoi la séquence (0,0,0) (1,2,1) (2,5,0) est-elle décodée (en faisant l’hypothèse d’un codage
LZ77) ?
théorème de codage sans bruit de Shannon pour des codes sans préfixe d’une source sta-
tionnaire : hlog
∞ (U )
D ≤
E[LZ ]
k .
compte de précédences Rn (v) est le nombre de symboles reçus au temps n jusqu’à la der-
nière réception de v (avant n).
codes d’Elias-Willems codage d’Elias du compte de précédence.
algorithme de Lempel-Ziv LZ77 : utilise un tampon (cyclique) se rappelant la séquence
passée, code des séquences avec des mots de code consistant en une position en arrière
dans le tampon, une longueur et un caractère à ajouter en fin de la séquence actuelle.
R ÉSUMÉ DU CHAPITRE 7
passée, code des séquences avec des mots de code constitué de : une position (en ar-
rière) dans le tampon, une longueur et un caractère à ajouter en fin de la séquence
actuelle.
Histoire et bibliographie
En dépit de son importance fondamentale, le travail de Tunstall ne fut jamais publié dans la
littérature. La thèse de doctorat de Tunstall (A. Tunstall, « Synthesis of Noiseless Compression
Codes », Ph.D. thesis, Georgia Institute of Technology, Atlanta, GA, 1968), qui contient ce tra-
vail, resta non remarquée pendant de longues années avant de devenir familière aux théoriciens
de l’information.
Chapitre 8
Exercices du module I1
Exercice 8.1.1:
1 2 3 4 5 6
0.12 0.15 0.16 0.17 0.18 0.22
a– Avec un code de Tunstall binaire codant sur 4 bits, combien de séquences de ce dé peut-on
coder ? Lesquelles (c.-à-d, dessinez l’arbre de codage) ?
e– Coder la séquence « 1664 » à l’aide de ce codes.
Exercice 8.2.1:
P (0|0) = p P (0|1) = 1 − p
(p < 1/3)
P (1|0) = 1 − p P (1|1) = p
139
140 CHAPITRE 8. EXERCICES DU MODULE I1
a– Calculer l’entropie d’un symbole quelconque la source (cela à un sens puisque la source
est stationnaire).
Calculer la longueur moyenne d’un code binaire par symbole de cette source (ne cher-
chez pas trop loin : ceci est vraiment trivial !).
b– Calculer l’entropie assymptotique de la source, c.-à-d.
H∞ (U ) = lim H(Un |U1 ... Un−1 )
n→∞
Exercice 8.3.1:
L’exercice précédent illustre l’apport des techniques de codage par blocs pour des sources
« à mémoire ». Le problème de telles approches reste cependant le choix de la taille du bloc
qui, pour être optimal, reste tributaire de la connaissance de la source (c.-à-d. la connaissance
de P (Un |U1 ... Un−1 )). Il existe cependant de nombreuses techniques de compression, dites
« universelles », dont le taux de compression tant assymptotiquement vers H∞ (U ) sans pour
autant connaître les caractéristiques fines de la source1 . Une telle technique est l’algorithme
de Lempel-Ziv utilisé2 par exemple dans les programmes compress ou gzip. En voici le
principe :
a– La première étape consiste à découper le message à coder en sous-chaînes (en commençant
par la chaîne vide) de sorte à ne jamais répéter deux fois la même sous-chaîne et à
toujours créer la sous-chaîne la plus courte possible. Effectuer ce3 découpage sur le
message 0110100100100101011010.
1
Il faut cependant faire des hypothèses de stationnarité et d’ergodicité de la source.
2
avec divers raffinements. L’algorithme présenté ici est connu sous le nom LZ78.
3
car il est unique
8.3. CODAGE DE SOURCES À MÉMOIRE 141
Module C4 : Transmission
d’information en présence de bruit
Introduction
Lorsqu’on traite d’« information », l’un des objectifs principaux est de la transmettre de fa-
çon fiable. Dans ce contexte, « transmettre » signifie aussi bien « transmettre une information
d’un point à un autre », comme nous l’entendons généralement, que la « transmettre à travers
le temps » ; par exemple, pour la stocker quelque part (la mémoriser) puis la récupérer plus
tard. Dans les deux cas, cependant, la transmission de l’information peut rarement être accom-
plie de façon totalement fiable dans la vie réelle. Il existe toujours un risque de distorsion de
l’information transmise : du bruit sur la ligne, une fuite dans la mémoire ou le disque dur où
l’information est stockée, etc.
Quel effet le bruit a-t-il sur la transmission de messages ? Plusieurs situations sont possibles :
– il n’est jamais possible de transmettre des messages de façon fiable (trop de bruit) ;
– il est possible de transmettre des messages avec une probabilité d’erreur « raisonnable » ;
143
144 CHAPITRE 9. TRANSMISSION D’INFORMATION EN PRÉSENCE DE BRUIT
– il est possible de transmettre des messages avec une probabilité d’erreur aussi faible que l’on
veut (à l’aide de codes correcteurs).
L’objectif du présent chapitre est précisément d’étudier en quoi le codage peut aider à trans-
mettre l’information de façon fiable, même en présence de bruit pendant la transmission. L’idée
de base de tels codages est de tenter d’ajouter de la redondance au message codé. Ainsi, sa
transmission dans des conditions de bruit « raisonnables » conserve suffisamment d’informa-
tion intacte, de façon à ce que le destinataire soit en mesure de reconstituer le message original
sans distorsion.
Bien entendu, il est nécessaire de définir plus précisément les notions de « redondance suffi-
sante » et de « conditions de bruit raisonnables »; elles doivent même être quantifiées et reliées
l’une à l’autre. Cela se fait en formalisant tout d’abord la notion de « transmission bruitée »
par l’introduction de la notion de « canal de communication » (section 9.1).
Comme nous le verrons dans la section 9.3, les deux notions fondamentales régissant les trans-
missions en présence de bruit sont la capacité de canal et le taux de transmission des symboles
des messages. Ces notions sont également introduites dans la section 9.1.
Bruit
Message
Source reçu
Codeur Canal Decodeur
n
Ui z1i ... zni z 1 ... z U
{
{
Zi Z
Mot de code Mot de code
transmis reçu
F IG . 9.1 – Communication avec correction d’erreur à travers un canal bruité.
Le cadre général dans lequel se place ce chapitre est résumé en figure 9.1.
Définition 9.1 (Canal discret sans mémoire (DMC)) Le canal discret sans mé-
moire (DMC∗ ) est le type de canal de communication le plus simple. Formellement,
un DMC est défini par les trois objets suivants :
1. un alphabet d’entrée discret VX , dont les éléments représentent les symboles
possibles émis pour tous les messages d’entrée (la source X);
2. un alphabet de sortie discret VY , dont les éléments représentent les symboles
possibles reçus (séquence de sortie); et
3. pour chaque x ∈ VX , les distributions de probabilité conditionnelles pY |X=x
qui décrivent le comportement du canal de façon à ce que pour tout n =
1, 2, 3, . . . :
Exemple 9.1 (Canal binaire symétrique) Le cas le plus simple (et non trivial) de DMC est
le canal binaire symétrique (BSC∗ ), pour lequel VX = VY = {0, 1} (« binaire ») et
1
La notion de message a été définie dans le chapitre 5.
146 CHAPITRE 9. TRANSMISSION D’INFORMATION EN PRÉSENCE DE BRUIT
(« symétrique »). Cette valeur p = pY |X=0 (1) = pY |X=1 (0) est appelée le taux d’erreur et
est le seul paramètre du BSC. En effet, pY |X=0 (0) = pY |X=1 (1) = 1 − p.
Un BSC est alors représenté par le diagramme suivant :
1−p
1 1
p
X p Y
0 1−p 0
Exemple 9.2 (Transmission bruitée via un canal binaire symétrique) Supposons que
nous voulions transmettre les 8 messages suivants : 000, 001, 010, 011, 100, 101, 110
et 111.
Supposons que le canal utilisé pour la transmission soit bruité, et qu’il modifie un symbole
sur dix, indépendamment de tout le reste; c’est-à-dire que chaque symbole a une probabilité
p = 0.1 d’être « changé » (0 en 1, et 1 en 0). Un tel canal est donc un BSC avec un taux
d’erreur égal à p = 0.1,
Quelle est alors la probabilité de transmettre correctement un de nos messages ?
Sans tenir compte de quel message est envoyé, cette probabilité est :
¡3¢
Quelle est la probabilité de changer 2 symboles correspondants ? Seulement 1 p2 (1−p)4 =
3 p2 (1 − p)4 .
De la même façon, la probabilité de changer 4 symboles correspondants est 3 p4 (1 − p)2 , et
la probabilité de changer les six symboles est p6 .
Donc la probabilité de ne pas détecter une erreur est
Ce qui est beaucoup plus petit ! Cela signifie que la probabilité de commettre une erreur à la
réception (c’est-à-dire de faire confiance à un message sans s’apercevoir qu’il est erroné) est
0.02, soit 2% seulement.
Conclusion : certains codages sont meilleurs que d’autres pour la transmission de messages
via un canal bruité .
Clarifions maintenant la situation où un DMC est utilisé sans retour∗ , c’est-à-dire lorsque la
distribution de probabilité des entrées ne dépend pas de la sortie. Plus formellement, on dit
qu’un DMC est « sans retour » lorsque :
pour tout n = 1, 2, 3, . . . . Notez que (9.2) n’implique pas que nous choisissions chaque sym-
bole d’entrée indépendamment des symboles d’entrée précédents, mais simplement que nous
n’utilisons absolument pas les symboles de sortie précédents lorsque nous choisissons des sym-
boles d’entrée successifs (comme nous pourrions le faire si un canal d’information en retour
était disponible de la sortie à l’entrée du DMC).
Donnons à présent un résultat fondamental sur le DMC sans retour.
Théorème 9.1 Pour tout DMC sans retour, nous avons pour tout n ∈ N :
n
X
H(Y1 . . . Yn |X1 . . . Xn ) = H(Yi |Xi )
i=1
Le rôle d’un canal est de transmettre des messages (« information ») d’un point (l’entrée) à
un autre (la sortie). La capacité d’un canal∗ mesure précisément cette compétence : c’est la
quantité maximale d’information moyenne que la sortie du canal peut fournir sur l’entrée.
Souvenez-vous qu’un DMC est entièrement spécifié par les distributions de probabilité condi-
tionnelle pY |X=x (où X représente l’entrée du canal et Y la sortie). La distribution de probabi-
lité d’entrée pX (x) ne fait pas partie du canal, mais uniquement de la source d’entrée utilisée.
La capacité d’un canal est donc définie comme l’information mutuelle maximale I(X; Y ) qui
peut être obtenue parmi tous les choix possibles de pX (x). Plus formellement :
148 CHAPITRE 9. TRANSMISSION D’INFORMATION EN PRÉSENCE DE BRUIT
Définition 9.2 (Capacité d’un canal) La capacité C d’un canal discret sans mé-
moire est définie comme
C = max I(X; Y ), (9.3)
pX
Nous verrons brièvement que cette définition est effectivement très utile pour l’étude des trans-
missions bruitées. Mais donnons tout d’abord un premier exemple.
Exemple 9.3 (Capacité d’un BSC) Quelle est la capacité C d’un BSC, comme défini dans
l’exemple 9.1?
Notez tout d’abord que par définition de l’information mutuelle,
³ ´
C = max H(Y ) − H(Y |X) .
pX
puisqu’il ne dépend pas de pX . Par ailleurs, puisque Y est une variable aléatoire binaire,
nous avons (par le théorème 1.2) : H(Y ) ≤ log 2, c’est-à-dire H(Y ) ≤ 1 bit. Ce maximum
peut-il être atteint pour certains pX ? Oui, en effet : si X est distribuée uniformément, nous
avons pY (0) = p · pX (1) + (1 − p) · pX (0) = 0.5 p + 0.5 (1 − p) = 0.5; ce qui signifie
que Y est aussi distribuée uniformément, ce qui mène à H(Y ) = 1 bit. Par conséquent :
maxX H(Y ) = 1 bit et donc
C =1−e
h(p) (en bit).
Évaluation 40
Quelle est la capacité du « canal symétrique à perte » défini par le graphe suivant :
1−p
0 0
p
X (perte) Y
p
1 1
1−p
Ici, nous considérons uniquement des DMC ayant un alphabet fini, c’est-à-dire un nombre fini
K de symboles d’entrée et un nombre fini J de symboles de sortie.
Définition 9.3 On dit qu’un tel DMC est symétrique à l’entrée si les distributions de
probabilité d’erreur sont© toutes les mêmesaªpour tous les symboles d’entrée; c’est-à-
dire que les ensembles pY |xi (y) : y ∈ VY sont indépendants de xi . ¨
a
à une permutation près
Un BSC est symétrique à l’entrée. Celui de la figure (a) ci-dessus est également symétrique
à l’entrée, mais le canal de la figure (b) n’est pas symétrique à l’entrée.
Lemme 9.1 Pour un DMC symétrique à l’entrée, H(Y |X) est indépendant de la
distribution pX , et H(Y |X) = H(Y |xi ) pour tout xi ∈ VX .
où {p1 , p2 , . . . , pJ } est l’ensemble des probabilités transition pY |xi (y), qui est indépendant
du symbole d’entrée xi . Par conséquent,
X X
H(Y |X) = pX (x)H(Y |X = x) = pX (x)H0 = H0
x x
Pour un DMC symétrique à l’entrée, trouver la probabilité d’entrée qui réalise la capacité (i.e.
atteint le maximum de )se réduit simplement à trouver la distribution d’entrée qui maximise
l’incertitude de la sortie.
150 CHAPITRE 9. TRANSMISSION D’INFORMATION EN PRÉSENCE DE BRUIT
Un canal symétrique à l’entrée est un canal dans lequel les probabilités sortant de chaque
symbole d’entrée sont identiques. Nous considérons à présent des canaux ayant la propriété
que les probabilités entrant sur chaque symbole de sortie sont identiques.
a
Certains auteurs ont appelé cette propriété « faible symétrie en sortie ».
Exemple 9.5 (Canal symétrique en sortie) Tout BSC (voir exemple 9.1) est symétrique en
sortie. Le canal de l’exemple 9.4, figure (b), est symétrique en sortie, mais celui de la fi-
gure (a) ne l’est pas.
Lemme 9.2 Pour un DMC symétrique en sortie, une distribution de probabilité d’en-
trée uniforme (c’est-à-dire pX (xi ) est la même pour tout xi ) conduit à une distribu-
tion de probabilité de sortie uniforme (c’est-à-dire que pY (yi ) est la même pour tout
yi ).
D ÉMONSTRATION
X 1 X
pY (yj ) = pY |xi (yj )pX (xi ) = p (yj )
xi
|VX | x Y |xi
i
Mais puisque le DMC est symétrique en sortie, la somme de droite dans cette dernière équa-
tion est indépendante de yj . Donc pY est indépendant de yj ; c’est-à-dire qu’il est la distribu-
tion de probabilité uniforme. ¥
Propriété 9.2 Pour tout DMC symétrique en sortie (d’entrée X et de sortie Y ), nous
avons :
max H(Y ) = log |VY |. (9.6)
pX
9.1. CANAL DE COMMUNICATION 151
Définition 9.5 (Canal symétrique) Un DMC est symétrique lorsqu’il est à la fois
symétrique en entrée et symétrique en sortie. ¨
Théorème 9.2 La capacité d’un canal symétrique (dont l’entrée est X et la sortie
Y ) est donnée par :
C = log |VY | − H0 (9.7)
où H0 = H(Y |X = xi ) pour n’importe lequel des symboles d’entrée xi ∈ VX .
Exemple 9.6 Le BSC (voir exemple 9.1) est un canal pour lequel H0 = e
h(p) = −p log p −
(1 − p) log(1 − p). Ainsi,
CBSC = log 2 − e
h(p) = 1 − e
h(p) (en bit)
Notez que |VU | représente également le nombre de mots de code possibles (code non-singulier
déterministe).
En pratique, on utilise l’arité du code comme base b pour le logarithme dans le calcul du taux
de transmission.
Exemple 9.7 Le taux de transmission (binaire) du code utilisé dans l’exemple 9.2 est R =
log 8 3 1
6 = 6 = 2 . Cela semble raisonnable puisque ce code répète chaque message deux fois,
c’est-à-dire qu’il utilise deux fois les symboles émis à l’origine.
Évaluation 41
Sur un canal bruité, nous prévoyons d’utiliser un code consistant à tripler chaque symbole des
messages. Par exemple, a sera transmis aaa.
Quel est le taux de transmission R d’un tel code ?
(Si vous êtes perplexes au sujet de la base, choisissez pour cette dernière l’arité de la source,
c’est-à-dire le nombre de symboles différents que la source peut émettre.)
152 CHAPITRE 9. TRANSMISSION D’INFORMATION EN PRÉSENCE DE BRUIT
Nous avons défini la capacité d’un canal comme étant la quantité maximale d’information que
la sortie du canal peut fournir sur l’entrée. Que peut-on dire si nous employons plusieurs fois
le même canal (comme ce devrait être le cas dans la vie réelle !) ?
Lemme 9.3 Si un DMC sans retour, de capacité C est utilisé n fois, nous avons :
I(X1 . . . Xn ; Y1 . . . Yn ) ≤ n C
Ici, nous considérons la situation illustrée en figure 9.2, où plusieurs « processeurs » sont em-
ployés successivement. Les « processeurs » considérés ici sont des « boîtes noires » totalement
arbitraires. Ils peuvent être déterministes ou stochastiques. Ils peuvent même ne rien contenir
du tout. Tout ce que la figure 9.2 affirme, c’est qu’il n’y a pas de « chemin caché » par lequel
X peut affecter Z, c’est-à-dire que X ne peut affecter Z qu’indirectement à travers son effet
sur Y . En termes mathématiques, cette contrainte peut être exprimée ainsi :
pour tout y tel que pY (y) 6= 0, ce qui signifie que lorsque y est donné, z n’est pas influencé
par x.
9.2. QUELQUES LEMMES 153
X Processeur Y Processeur Z
no. 1 no. 2
Le lemme du traitement des données dit essentiellement que l’information ne peut être aug-
mentée d’aucune façon par un quelconque traitement (bien qu’elle puisse éventuellement être
mise sous une forme plus accessible !).
Lemme 9.4 (Lemme de traitement des données) Lorsque (9.8) est valable, nous
avons :
I(X; Z) ≤ I(X; Y ) (9.9)
et
I(X; Z) ≤ I(Y ; Z). (9.10)
À présent, pour la première fois depuis le début de notre étude de la théorie de l’information,
nous introduisons la notion d’« erreurs ». Supposons que nous pensions à la variable aléatoire
b comme étant une estimation de la variable aléatoire U . Afin que cela ait un sens, U
U b doit
prendre les valeurs du même alphabet que U . Une erreur est alors simplement l’événement
b 6= U et la probabilité d’erreur, Pe , est donc
U
b 6= U ).
Pe = P (U (9.11)
Nous sommes maintenant prêts pour l’un des résultats les plus intéressants et les plus impor-
b ).
tants en théorie de l’information, et qui relie Pe à l’incertitude conditionnelle H(U |U
Nous pouvons maintenant aborder l’interprétation du lemme de Fano. Tout d’abord, nous ob-
servons que la fonction à gauche de (9.12), esquissée en figure 9.3, est concave en Pe et est
positive pour tout Pe (0 < Pe ≤ 1) .
b ) est donnée, (9.12) spécifie implicitement une
Ainsi, lorsqu’une valeur positive de H(U |U
borne inférieure positive sur Pe .
b soient binaires (i.e., D = 2) et que H(U |U
Exemple 9.8 Supposons que U et U b) = 1
bit.
2
Alors (9.12) donne
e 1
h(Pe ) ≥
2
9.3. LE THÉORÈME DE CODAGE EN PRÉSENCE DE BRUIT 155
Le rôle de cette section est de donner un exemple concret de codes correcteurs d’erreurs très
simples (voire naïfs). Des exemples plus réalistes seront présentés et étudiés dans le cha-
pitre 11.
Il y a donc peu de choses à apprendre dans cette section, si ce n’est que le codage naïf par
répétition n’est pas très bon et que d’autres codes plus appropriés devraient être considérés en
pratique.
Les codes binaires à répétition sont des codes Rk pour lesquels chaque symbole d’entrée
(binaire) est répété n = 2 k + 1 fois (k > 1). Par exemple, le code R1 a été employé dans
l’exemple 9.2. Nous ne considérons qu’un nombre impair de répétitions car le décodage de
tels codes se fait par la majorité. Nous évitons donc le non-déterminisme qu’un nombre pair de
répétitions pourrait introduire (dans des cas où le mot de code reçu contient autant de 0s que
de 1s).
Avec de tels codes, la probabilité d’une mauvaise décision concernant le décodage d’un sym-
bole est la probabilité qu’au moins k + 1 erreurs se sont produites sur le bloc correspondant.
Considérons le cas où un tel code est employé sur un BSC. Dans ce cas, le nombre d’erreurs
commises par le canal suit une distribution binomiale de paramètres (n, p). Par conséquent, le
nombre d’erreurs moyen au niveau de la transmission de symboles de mots de code est n p.
Pour p < 0.5, ce nombre moyen est inférieur à k + 0.5, donc la probabilité qu’au moins k + 1
erreurs se soient produites sur un mot de code (soit un bloc de codage), tend à être négligeable
quand k (et donc n) tend vers l’infini. En d’autres termes, la probabilité que l’on prenne une
mauvaise décision en décodant devient négligeable à mesure que le nombre de répétitions
augmente (et donc aussi la longueur des mots de code). Nous pouvons donc compenser, à un
degré aussi fin que l’on veut, la perte due au bruit sur le canal en choisissant un nombre de
répétitions assez grand.
Cependant, dans ce cas, le prix à payer est très élevé en termes d’efficacité. En effet, le taux de
transmission d’un tel code est n1 ... ...qui tend aussi vers 0 lorsque n tend vers l’infini ! Pour n
grand, cela devient assurément un taux de transmission inacceptablement bas.
L’importance du théorème de codage bruité est précisément qu’il garantit pour tout taux de
transmission donné au-dessous de la capacité l’existence de codes corrigeant suffisamment
156 CHAPITRE 9. TRANSMISSION D’INFORMATION EN PRÉSENCE DE BRUIT
d’événements. Le taux de transmission peut être fixé a priori et n’a pas besoin d’être ridi-
culement petit comme dans l’exemple des codes par répétition. Il faut seulement qu’il soit
au-dessous de la capacité du canal.
e-nnexe : Codes par répétition sur un BSC
Évaluation 42
Sur un BSC de probabilité d’erreur p, nous envisageons d’utiliser le code par répétition R1
consistant à tripler chaque symbole des messages. Le décodage est fait à la majorité dans le
bloc reçu.
En fonction de p, quelle est la probabilité Pb d’erreur par bit en sortie pour un tel système de
communication ?
1. p2 − p3
2. p2
3. 3p2 − 2p3
4. 2p2 − 3p3
5. p3
Dans cette section, nous montrons qu’il est impossible de transmettre de l’information de façon
fiable via un DMC à un taux de transmission supérieur à la capacité de ce DMC. Sans perte
de généralité, nous supposons que l’« information » à transmettre est la sortie d’une source
binaire symétrique (BSS∗ ), pour « Binary Symmetric Source », qui est une source binaire sans
mémoire telle que P (0) = P (1) = 21 . Ici, nous considérons le cas où le DMC est sans retour
(voir figure 9.1).
Donnons maintenant un résultat important (introduit par C. Shannon) sur les transmissions via
un tel canal.
−1
Ici, nous avons écrit e
h pour la fonction inverse de l’entropie d’une variable aléatoire binaire.
−1
Elle est définie par e
h (x) = min{p : −p log(p) − (1 − p) log(1 − p) = x}, où le minimum
est sélectionné de sorte à rendre cet inverse unique (voir figure 9.4).
Une conséquence importante de ce théorème est que chaque fois que R > C, (9.13) spécifiera
une borne inférieure positive sur la probabilité Pb d’erreur par bit de sortie qu’aucun code
9.3. LE THÉORÈME DE CODAGE EN PRÉSENCE DE BRUIT 157
0.9
0.8
0.7
0.6
0.5
0.4
0.3
0.2
0.1
0
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
−1
F IG . 9.4 – La fonction e
h , fonction inverse de l’entropie d’une variable binaire, définie par
−1
e
h (x) = min{p : −p log(p) − (1 − p) log(1 − p) = x}.
correcteur, aussi complexe soit-il, ne pourra réduire. En clair : il est impossible de transmettre
des informations de façon fiable à un taux supérieur à la capacité du canal.
Avant d’examiner la démonstration du théorème, donnons un exemple de son utilisation.
Cela signifie qu’au moins 11% des symboles binaires ne seront pas transmis correctement.
(même après décodage)
D ÉMONSTRATION Nous voulons montrer que lorsque R > C, il y a une borne inférieure
positive sur Pb qu’aucune façon de coder ne pourra dépasser.
Soit PB la probabilité d’erreur par mot :
m
X
b=
PB = P (U 6 U) = bi 6= Ui )
P (U
i=1
A noter que :
1
PB ≤ Pb ≤ PB ≤ mPb (9.14)
m
(on a en effet PB = 1 − (1 − Pb )m et Pb = 1 − (1 − PB )1/m ).
Par l’utilisation du lemme de Fano, nous avons, dans le cas binaire considéré ici :
e
h(PB ) = e b 6= U )) ≥ H(Ui |Ubi )
h(P (U
En outre, puisque e
h(x) est concave en x (pour 0 ≤ x ≤ 1) et que e
h(0) = 0 :
µ ¶
1 e e 1
h(PB ) ≤ h PB . (9.15)
m m
Et comme e
h est croissante sur [0, 0.5] :
1 e
h(PB ) ≤ e
h(Pb )
m
puisque dans le cas où la source d’entrée U est une BSS, H(U ) = H(U (1) . . . U (m) ) =
log 2m = m .
b) ?
Qu’en est-il de I(U ; U
Si nous prenons pour « processeur 1 » et « processeur 2 » de la figure 9.2 respectivement le
« codeur » et le « canal » de la figure 9.1, en utilisant le lemme du traitement des données,
nous obtenons :
b ) ≤ I(Z; U
I(U ; U b) (9.16)
et donc
e n
h(Pb ) ≥ 1 − C
m
c’est-à-dire, par définition du taux de transmission R:
e C
h(Pb ) ≥ 1 −
R
Évaluation 43
Sur un DMC sans retour de capacité C, nous voulons transmettre un message avec une proba-
bilité d’erreur par bit Pb inférieure à une valeur donnée Pb max ∈]0, 12 [.
Nous ne savons pas encore quel type de code sera utilisé. Cependant, nous souhaitons déter-
miner le taux de transmission maximal Rmax que nous pouvons utiliser sur ce canal (et qui soit
compatible avec Pb ≤ Pb max ).
Quel est Rmax en termes de C et Pbmax ?
1. C
−1
2. e
h (Pb max )
3. C − e
h(Pb max )
C
4.
(1 − e
h(Pb max ))
1
5.
(C − h−1 (Pb max ))
−1
6. e
h (1 − C/Pb max )
Jusqu’à présent, nous avons vu qu’il est impossible d’avoir une erreur de transmission au-
dessous d’un certain niveau si le taux de transmission R est plus grand que la capacité du canal.
Nous étudions maintenant ce qui se passe lorsque nous souhaitons transmettre les messages
d’une BSS sur une DMC à un taux inférieur à sa capacité.
zi Z
zj
zk
F IG . 9.5 – Exemple d’erreur de décodage dans la structure de codage aléatoire : zi a été envoyé,
zb a été reçu et sera décodé ici en zj .
Souvenez-vous tout d’abord que la capacité d’un BSC est C = 1 − e h(p), où p est la
probabilité d’erreur du canal et où e
h(x) est l’entropie d’une variable aléatoire binaire :
e
h(x) = −x log x − (1 − x) log(1 − x).
Puisque 0 < R < C, nous avons 1 > 1 − R > e
h(p), et par conséquent :
~
h(x)
1
1−R
~
h(p)
0 1111
0000 x
p ~
h−1(1−R) 0.5
puisque R + e
h(λ) − 1 < 0.
Donc pour tout ε > 0 donné, il existe n0 tel que
p (1 − p) e
∀n ≥ n0 2
+ 2n (R+h(λ)−1) ≤ ε
n · (λ − p)
Pour des raisons techniques qui seront plus claires par la suite, nous avons également besoin
d’avoir n tel que ⌊λ n⌋ = max {q ∈ N : q ≤ λ n} > n p. C’est le cas à condition que n >
1
n1 = (λ−p) .
En résumé, jusqu’ici, nous sommes parvenus au résultat suivant :
En fait, ceci est vrai pour tout n > max {n0 , n1 } définis ci-dessus.
Nous avons donc trouvé l’une des « longueurs de mots de code appropriées n ». Procé-
dons alors comme expliqué au début avec M = 2n R mots de code et r = ⌊λ n⌋ =
max {m ∈ N : m ≤ λ n}. Dans ce schéma de codage, pour un mot de code zi , une erreur
se produit lorsque (voir figure 9.5)
1– plus de r erreurs de transmission se sont produites : d(b
z , zi ) > r
ou
2– a) d(bz , zi ) ≤ r
et
162 CHAPITRE 9. TRANSMISSION D’INFORMATION EN PRÉSENCE DE BRUIT
b) ∃z ∈ C, z 6= zi : d(b z , z) ≤ r
et
c) i 6= 1
où C = {z1 , ..., zM } représente le code.
Par conséquent, la probabilité Perr (zi ) qu’un mot de code donné zi ne soit pas transmis cor-
rectement (décodage inclus) est borné par
E[d(b
z , zi )] = n p z , zi )) = n p (1 − p)
var(d(b
n p (1 − p)
z , zi ) − n p| ≥ r − n p) ≤
P (|d(b
(r − n p)2
Par conséquent :
z , zi ) > r) ≤ P (d(b
P (d(b z , zi ) ≥ r) = P (d(b
z , zi ) − n p ≥ r − n p)
≤ P (|d(b
z , zi ) − n p| ≥ r − n p)
n p (1 − p)
≤ (9.19)
(r − n p)2
et donc
r µ ¶
1 X n
z , z) ≤ r) = n
P (d(b
2 k
k=0
En outre, comme nous allons le montrer à la toute fin de cette démonstration, nous avons
pour tout 0 ≤ r ≤ n2 :
Xr µ ¶
n e r
≤ 2n h( n ) ,
k
k=0
n
donc (souvenez-vous que M = 2nR et que r ≤ 2 puisque λ < 0.5) nous avons trouvé,
finalement :
2nR − 1 n eh( r )
P (∃z ∈ C \ {zi } : d(b
z , z) ≤ r) ≤ 2 n
2n
e r
≤ 2n(R+h( n )−1) (9.20)
n p (1 − p) e r
Perr (zi ) ≤ + 2n(R+h( n )−1)
(r − n p)2
r µ ¶
X X n µ ¶
n n
= δ(k − r)
k k
k=0 k=0
½
1 si t ≤ 0
où δ(t) =
0 autrement
r µ ¶
X n (1 + x)n
i.e. ≤
k xr
k=0
r
ce qui est vrai en particulier pour x = n−r , avec r ≤ n/2:
r µ ¶
X r n
n (1 + n−r )
≤ r r
k ( n−r )
k=0
r µ ¶
X n r r
i.e. ≤ 2n·log(1+ n−r )−r·log( n−r )
k
k=0
r r
Mais : n · log(1 + ) − r · log( )
µ n − r n ¶− r
r
1 r n
= n · log( ) − log( )
1 − nr n 1 − nr
³ r r r r ´
= n · − log − (1 − ) log(1 − )
n n n n
e )r
= n · h(
n
ce qui conclut la démonstration. ¥
Évaluation 44
Considérons ici l’utilisation d’un BSC de probabilité d’erreur p (dont la capacité est donc
C = 1−e h(p)). Dans les cas suivants, dites si un code remplissant les conditions demandées
R et Pb pourrait être construit :
canal p 3% 6%
C 0.807 0.673
code R 2/3 3/4 9/10 2/3 3/4 9/10
Pb (en %) 1 2.2 1 2.2 1 2.2 1 2.2 1 2.2 1 2.2
existe ?
Théorème de Shannon en présence de bruit : Pour tout ε > 0 et tout R < C, C étant la
capacité d’un canal discret sans mémoire, il existe un code dont le taux de transmission
est R et dont la probabilité d’erreur par bit en sortie Pb est au-dessous de ε.
Inversement, tous les codes pour lesquels le taux de transmission est au-dessus de la
−1 ¡ ¢
capacité du canal ont une probabilité Pb supérieure à e h 1− CR .
R ÉSUMÉ DU CHAPITRE 9
logb |VU |
Code/Taux de transmission : Rb = n
Capacité de canaux symétriques à l’entrée : C = max [H(Y )] − H(Y |X = xi ) pour
PX
n’importe quel xi ∈ VX .
Capacité de canaux symétriques : C = log |VY | − H(Y |X = xi ) pour n’importe quel
xi ∈ VX .
Lemme du traitement des données : pZ|x,y (z) = pZ|y (z) =⇒ I(X; Z) ≤
I(X; Y ) et I(X; Z) ≤ I(Y ; Z)
Lemme de Fano : e b)
h(Pe ) + Pe log2 (|VU | − 1) ≥ H(U |U
Théorème de Shannon en présence de bruit : Pour tout ε > 0 et tout R < C, C étant la
capacité d’un DMC, il existe un code dont le taux de transmission est R et dont la
probabilité d’erreur par bit en sortie Pb est au-dessous de ε.
Inversement, tous les codes dont le taux de transmission est au-dessus de la capacité
−1 ¡ ¢
de canal ont une probabilité d’erreur par bit en sortie Pb supérieure à e
h 1− C
R .
Histoire et bibliographie
Ce théorème fut une véritable « bombe » lors de sa publication dans l’article de C. Shannon
en 1948 [9]. Avant cela, on pensait généralement que pour établir des communications plus
fiables, il était nécessaire de réduire le taux de transmission (ou, ce qui est équivalent, d’aug-
menter le « rapport signal/bruit », comme les ingénieurs l’auraient dit en 1947). Shannon a
dissipé ces mythes en montrant qu’à condition que le taux de transmission soit au-dessous de
la capacité de canal, on pouvait augmenter la fiabilité en augmentant la complexité du système
de codage, sans changer le rapport signal/bruit.
La première démonstration rigoureuse du théorème de Shannon en présence de bruit est due à
Feinstein, en 1954 [4]. Une démonstration plus simple employant le codage aléatoire tel que
présenté ici fut publiée par Gallager en 1965 [5]. La partie réciproque du théorème fut prouvée
par Fano en 1952, et publiée dans ses notes de cours.
Exercices du module C4
Exercice 10.1.1:
Considérons le canal défini par le graphe suivant (où λ représente le message vide, où p est la
probabilité d’erreur et q la probabilité de perte):
1−p−q
0 0
q
p
p λ
q
1 1−p−q 1
Exercice 10.1.2:
a– Démontrez que la mise en cascade (les uns après les autres) d’un nombre quelconque de
BSC, même différents, mène finalement à un BSC.
b– Dans le cas spécial où le même BSC (ayant une probabilité d’erreur p) est cascaded N fois,
quelle relation de récurrence la probabilité d’erreur obtenue PN vérifie-t-elle ?
167
168 CHAPITRE 10. EXERCICES DU MODULE C4
Exercice 10.1.3:
Quelle est la capacité d’un canal ternaire (c’est-à-dire dont les alphabets d’entrée et de sortie
ont 3 symboles différents), the transmission probability matrix is:
1 0 0
M = 0 2/3 1/3
0 1/3 2/3
Exercice 10.1.4:
a– En supposant que les deux sources X1 et X2 soient indépendantes et que le canal résultant
vérifie P (Y |X) = P (y1 |x1 ) · P (y2 |x2 ) (forte supposition d’indépendance1 ), calculez la
capacité de canal résultante.
b– Et si nous considérions une seule source sans mémoire U et utilisions le canal en envoyant
un symbole sur un canal, puis le suivant sur le second canal, etc..; c’est-à-dire si nous
prenions X1 = U2 n et X2 = U2 n+1 ?
Exercice 10.1.5:
Considérons un canal binaire (c’est-à-dire que les alphabets d’entrée et de sortie sont binaires)
mais non symétrique (par exemple avec une “fuite de masse”, c’est-à-dire une plus grande
probabilité de produire 0 que 1).
1
Notez que ce n’est pas le cas en général : deux variables aléatoires indépendantes ne sont pas toujours indé-
pendantes d’après une troisième !
10.1. CANAUX DE COMMUNICATION 169
p = P (Y = 0|X = 1) et q = P (Y = 1|X = 0)
de
h(r) 1−r
= β log2
ds r
où r = β · s + p.
d– La capacité d’un canal binaire symétrique (avec la probabilité d’erreur p) est 1 − e
h(p).
Trouvez ce résultat d’après votre calcul précédent.
Exercice 10.1.6:
1 − pi
0 0
pi
pi
1 1
1 − pi
Supposons en outre que la probabilité d’erreur soit indépendante des messages transmis et donc
que les sorties Yi du canal soient indépendantes conditionnellement à la séquence d’entrée
X1 , ..., Xn :
n
Y
P (Y = (y1 , ..., yn )|X = (x1 , ..., xn )) = P (Yi = yi |Xi = xi )
i=1
Enfin, supposons que X soit une source sans mémoire, c’est-à-dire que les entrées Xi soient
indépendantes.
Exercice 10.2.1:
Cet exercice résume une partie des control questions du module C4.
Considérons un DMC ayant des alphabets d’entrée et de sortie binaires, et ayant une distri-
bution de probabilité conditionnelle définie par P (Y = y|X = x) = p si x 6= y (et donc
P (Y = y|X = x) = 1 − p si x = y).
Sur ce canal, nous prévoyons d’employer le code R3 qui consiste à tripler chaque symbole
d’entrée. Par exemple, 0 est codé 000. Le décodage se fait à la majorité : par exemple, 010
est décodé 0, et 110 1.
b– Quel est le taux de transmission R du code R3 ?
c– Sur ce canal, quelle est the symbol error probability Pb du code R3 , en fonction de p?
d– Supposons que p = 0.173. Quelle est la symbol error probability correspondante Pb ?
Quelle est la capacité de canal C ? Est-elle supérieure ou inférieure au taux de transmis-
sion R ?
Ces résultats sont-ils compatibles avec le théorème de codage en présence de bruit ?
possible.
Exercice 10.2.2:
Un ingénieur a découvert un code à utiliser sur un BSC à la probabilité d’erreur p qui aboutit
à une probabilité output bit error probability de Pb = 8p2 .
Introduction
171
172 CHAPITRE 11. CODES CORRECTEURS D’ERREURS
Grâce à ses bases fortement mathématiques, la « théorie du codage algébrique » est maintenant
bien établie en tant que domaine scientifique à part entière, avec des applications à beaucoup
de problèmes qui ne se limitent pas au codage de canal.
Le but de ce chapitre n’est certainement pas de fournir une vue exhaustive des codes correcteurs
d’erreurs algébriques (un livre entier y parviendrait à peine), mais plutôt de présenter les idées-
clés du domaine. Le lecteur qui est intéressé par ce sujet peut se référer à la littérature plutôt
vaste dans le domaîne.
L’étude de ce chapitre requiert quelques connaissances mathématiques, particulièrement dans
de domaine des structures algébriques.
11.1.1 Introduction
Le contexte du présent chapitre est la transmission en présence de bruit telle que présentée
dans l’introduction du chapitre 9.
Lorsqu’un mot de code zi est transmis sur un canal bruité et que zb est finalement reçu, l’erreur
de transmission correspond à la différence entre zb et zi : e = zb − zi .
L’idée-clé derrière le codage algébrique est d’ajouter une structure algébrique à l’ensemble des
mots de code de sorte que l’erreur de transmission puisse aisément être exprimée en termes des
opérations définissant cette structure algébrique (à commencer par l’opération « différence »
ci-dessus).
Par exemple, si nous traitons des codes binaires (p.ex.10011) la différence « naturelle » sur
les mots binaires est la différence bit par bit (connue aussi sous le nom de « ou exclusif » pour
les lecteurs familiers avec l’informatique), c.-à-d. la différence à chaque position telle qu’il y
a un 0 si les deux bits correspondants sont les mêmes et un 1 dans le cas contraire : 0 - 1 = 1
et, comme d’habitude, 0 - 0 = 0, 1 - 1 = 0, 1 - 0 = 1.
Exemple 11.1 (Différence Binaire) Voici un exemple de différence entre deux mots (bi-
naires) :
11011 − 01101 = 10110
des éléments de l’espace vectoriel GF(2)n (où n est la longueur des mots de code). Cette base
s’étend aisément à n’importe quel code D-aire utilisant une arithmétique « modulo D ».
Définition 11.1 (Code par Bloc) Un code par bloc∗ D-aire de longueur n est un
sous-ensemble non vide de l’espace vectoriel des n-uplets GF(D)n (c.-à-d. des mots
D-aires de même longueur n, considérés comme des « vecteurs ligne »). ¨
Exemple 11.2 (Codes par Bloc) L’ensemble {1101, 0110, 1110} est un exemple de code
par bloc binaire.
Un autre exemple de code par bloc, considérant les codes ternaires utilisant les symboles
0 1 et 2, tels que 1 + 2 = 0 (c.-à-d. arithmétique GF(3)), est donné par l’ensemble
{120, 201, 222, 010}.
L’ensemble {011, 110, 10} n’est pas un code par bloc, ces mots n’étant pas tous de même
longueur.
Deux notions importantes dans le domaine des codes d’erreur algébriques sont maintenant
présentées : la distance de Hamming entre des mots et le poids d’un mot. La relation entre ces
notions et le problème de la correction d’erreurs est donnée dans la section suivante.
Définition 11.3 (Poids d’un mot de code) Le poids∗ d’un mot est le nombre de
symboles non nuls qu’il contient. ¨
Exemple 11.4 (Poids d’un mot de code) Le poids de 10110 est 3, tandis que le poids de
00000000 est 0 et que le poids de 001000 est 1.
Propriété 11.1 La distance de Hamming entre deux mots de code est le poids de leur
différence :
d(zi , zj ) = w(zi − zj )
en désignant la distance de Hamming par d(·) et le poids par w(·).
174 CHAPITRE 11. CODES CORRECTEURS D’ERREURS
d(10110, 11010) = 2
w(10110 − 11010) = w(01100) = 2
Voici maintenant quelques propriétés utiles des poids des mots de code.
Propriété 11.2 Le poids d’un mot de code est toujours positif ou nul.
Définition 11.4 (mot de code nul) Le mot de code nul∗ est le mot de code constitué
uniquement de zéros.
Il sera désigné par 0. ¨
Propriété 11.3 Le poids d’un mot de code est 0 si et seulement si ce mot de code est
la mot de code nul 0.
Propriété 11.4 Le poids est symétrique : pour chaque mot de code zi , w(zi ) =
w(−zi ) (où −zi est le mot dans lequel chaque symbole est l’opposé du symbole
correspondant dans zi ).
Exemple 11.6 (Symétrie du poids) En considérant les codes ternaires utilisant les symboles
0 1 et 2, tels que 1 + 2 = 0 (c.-à-d. une arithmétique GF(3)), nous avons :
Notez que dans le cas binaire, la dernière propriété est triviale car dans ce cas −zi = zi pour
chaque zi .1
1
Rappel : dans le cas binaire, −1 = 1.
11.1. NOTIONS DE BASE 175
En considérant les codes ternaires utilisant les symboles 0 1 et 2 comme ci-dessus, on a par
exemple :
(Rappel : on travaille ici dans GF(3), i.e. 1 + 2 = 0 et l’addition de mots de codes s’effectue
sans retenue, symbole par symbole).
Évaluation 45
Comment un décodeur de code par bloc pourrait-il prendre la décision de décoder un mot
reçu ? Une réponse intuitive naturelle est de supposer le plus petit nombre d’erreurs (c.-à-d.
w(e) minimal), ce qui, d’après ce qui vient d’être dit, amène à prendre le mot de code le plus
proche (c.-à-d. d(b
z , zi ) minimal).
Par exemple, si les deux seuls mot de code possibles sont 000 et 111, et que 010 est reçu,
nous voudrions certainement 2 le voir décodé en 000.
2
ne connaissant rien d’autre
176 CHAPITRE 11. CODES CORRECTEURS D’ERREURS
D(b
z ) = Argmin d(z, zb)
z∈C
P (Y = zb|X = z) · P (X = z)
Argmax P (X = z|Y = zb) = Argmax
z∈C z∈C P (Y = zb)
= Argmax P (Y = zb|X = z) · P (X = z)
z∈C
= Argmax P (Y = zb|X = z)
z∈C
puisqu’il y a exactement d(z, zb) symboles qui ont été corrompus par la transmission et n −
d(z, zb) qui ont été transmis correctement.
Il est alors aisé de voir que le mot de code z qui maximise P (Y = zb|X = z) est celui qui
minimise la distance d(z, zb).
Ceci prouve que, pour un BSC, le décodage à distance minimale et le décodage à vraisemblance
maximale sont équivalents.
3
ou même de l’estimer, bien que cela soit possible.
11.1. NOTIONS DE BASE 177
Existe-t-il un moyen de savoir à priori combien d’erreurs un code donné peut corriger ? ou
détecter ?4 La réponse est oui et repose principalement sur une caractéristique importante d’un
code par bloc : sa distance minimale.
Définition 11.6 (Distance Minimale d’un Code) La Distance Minimale∗ dmin (C)
d’un code C = {z1 , ..., zi , ..., zM } est la distance de Hamming minimale (non nulle)
entre toute paire de ses mots de code :
et un schéma d’erreur e de poids entre t + 1 et t + s qui n’est pas détectée mais décodé en un
autre mot de code zj : D(zi + e) = zj . En introduisant l’erreur e′ = zj − (zi + e), nous avons
aussi D(zj + e′ ) = zj , c.-à-d. que e′ est une erreur qui est corrigée lorsqu’elle est appliquée
à zj . Comme w(e′ ) = d(zj + e′ , zj ) = d(zi + e, zj ) ≤ d(zi + e, zi ) (à cause du décodage
à distance minimale), nous avons w(e′ ) ≤ t + s et D(zj + e′ ) = zj . Donc w(e′ ) doit être
inférieur (ou égal) à t. Ceci nous permet de conclure de manière similaire à ci-dessus :
Exemple 11.8 Un code par bloc ayant une distance minimale de 8 peut être utilisé pour l’un
ou l’autre des points suivants :
– corriger tous les schémas d’erreur de moins que 3 (inclus) erreurs et détecter tous les
schémas à 4 erreurs (t = 3, s = 1) ;
– corriger tous les schémas d’erreur de moins que 2 erreurs et détecter tous les schémas de 3
à 5 erreurs (t = 2, s = 3) ;
– corriger tous les schémas d’erreur de 1 erreur et détecter tous les schémas de 2 à 6 erreurs
(t = 1, s = 5) ;
– détecter tous les schémas de moins que 7 (inclus) erreurs (t = 0, s = 7).
Un code par bloc ayant une distance minimale de 7 peut (l’un ou l’autre)
– corriger tous les schémas d’erreur de moins que 3 (inclus) erreurs (t = 3, s = 0) ;
– corriger tous les schémas d’erreur de moins que 2 erreurs et détecter tous les schémas de 3
à 4 erreurs (t = 2, s = 2) ;
– corriger tous les schémas d’erreur de 1 erreur et détecter tous les schémas de 2 à 5 erreurs
(t = 1, s = 4) ;
– détecter tous les schémas de moins que 6 (inclus) erreurs (t = 0, s = 6).
Exemple 11.9 Pour être capable de corriger tous les schémas à 1 erreur (et c’est ce qu’on
recherche), un code par bloc doit avoir une distance minimale égale à 3 au moins.
Évaluation 46
code par bloc : un ensemble non vide de mots de même longueur, considérés comme des
« vecteurs ligne ».
poids : (d’un mot) le nombre de symboles non nuls.
distance de Hamming : le nombre de coordonnées par lesquelles deux vecteurs diffèrent.
La distance de Hamming entre deux mots est le poids de leur différence.
décodage à distance minimale : structure de correction d’erreurs dans laquelle chaque mot
reçu est décodé en le mot de code le plus proche (d’après la distance de Hamming).
180 CHAPITRE 11. CODES CORRECTEURS D’ERREURS
A cause de leurs propriétés et de leur simplicité, les codes linéaires, dont il est question dans
cette section, sont d’un intérêt majeur pour le codage d’erreurs. Un de leurs avantages princi-
paux dans la pratique est qu’ils sont aisément implémentables.
11.2.1 Définitions
Les codes linéaires sont des codes par bloc sur lesquels une structure algébrique a été ajoutée
pour aider au décodage : la structure d’espace vectoriel.
En regardant la définition des codes par bloc, la définition ci-dessus peut être reformulée : un
code linéaire est un code par bloc qui est un espace vectoriel.
Exemple 11.10 (Code Linéaire) Le code {1101, 0110, 1110} donné dans l’exemple 11.2
n’est pas un code linéaire car 0000 n’en fait pas partie (il ne pourrait donc pas être un espace
vectoriel).
Le code (binaire) {0000, 1101, 0110, 1011} est un code linéaire comme toute combinaison
linéaire (binaire) de mots de code est aussi un mot de code. Il est de plus un code linéaire
binaire (4, 2) car sa dimension (c.-à-d. la dimension du sous-espace vectoriel) est de 2 et sa
longueur de 4.
Notez en outre que la distance minimale de ce code est 2 (aisément vérifiable) et que ce code
ne peut donc être utilisé que pour la détection d’erreurs uniques (voir théorème 11.1).
Évaluation 47
Pour chacun des codes binaires suivants, spécifiez si le code est un code linéaire ou non. Si
oui, donnez les deux nombres n et m de la définition :
1. C = {0000, 1000, 0001, 1001}
2. C = {1000, 0001, 1001}
3. C = {00, 01, 11}
4. C = {0000, 1000, 1100, 0100, 1101, 0001, 0101, 1001}
5. C = {0, 1, 10, 11}
6. C = {00, 11, 10, 01}
7. C = {0000, 0001, 0010, 0100}
Ceci vient directement du fait qu’un code linéaire est un (sous-) espace vectoriel.
Étudions maintenant de manière plus approfondie ces codes linéaires. Premièrement, combien
de mots de code un code linéaire (n, m) D-aire contient-il ?
Propriété 11.9 Un code linéaire (n, m) D-aire contient Dm mots de code différents
(le mot de code nul inclus).
Notez que cette propriété peut être utilisée pour déterminer rapidement que les codes avec un
mauvais nombre de mots de code (qui n’est pas une puissance de D) ne sont pas linéaires. Pour
les codes linéaires, ceci peut aussi être utilisé pour une rapide détermination de m (p.ex. pour
« deviner » la taille d’une base).
vectoriel).
Pour un code (n, m) D-aire, il y a donc exactement Dm mots de code différents : toutes les
Dm combinaisons linéaires. ¥
D ÉMONSTRATION Rappel : le taux de transmission d’un code D-aire qui code une source
de M messages différents par des mots de code de longueur n est R = logD
n
M
.
Combien de messages différents peuvent être codés en utilisant un code linéaire (n, m) ?
Autant que de mots de code, c.-à-d. Dm .
Ainsi,
logD Dm m
R= =
n n
Ce résultat est très important en pratique, car wmin (C)est beaucoup plus facile à calculer que
dmin (C).
D ÉMONSTRATION Pour un code C = {z1 , ..., zi , ...}, on a par la définition 11.6 dmin (C) =
mini6=j d(zi , zj ).
Donc, en utilisant la propriété 11.1, dmin (C) = mini6=j w(zi − zj ).
Mais si C est un code linéaire, pour toute paire de mots de code zi et zj , zi − zj est aussi un
mot de code. C’est en outre le mot de code nul si et seulement si zi = zj (c.-à-d. i = j).
Ainsi dmin (C) ≥ wmin (C).
Réciproquement, pour tout mot de code zi , w(zi ) = d(zi , 0). Comme 0 fait partie de tout
code linéaire, on obtient : wmin (C) ≥ dmin (C), ce qui conclut la démonstration. ¥
Ce code peut donc corriger tous les schémas d’erreur avec 1 ou 2 erreurs (voir propriété 11.7).
[La vérification de la linéarité effective de ce code est laissée comme exercice.]
Évaluation 48
Évaluation 49
Combien d’erreurs peuvent (au plus) corriger les codes linéaires suivants :
1. C = {0000, 1000, 1100, 0100, 1101, 0001, 0101, 1001}
2. C = {000000000, 000000111, 000111000, 000111111, 111000000, 111000111, 111111000, 111111111}
L’accent doit maintenant être mis sur la relation liant les messages à coder aux mots de code
correspondants : il est temps de voir comment utiliser efficacement les codes linéaires pour
coder des messages.
Si les m mots de code choisis pour former une base d’un code linéaire (n, m) (espace vecto-
riel)5 sont désignés par z1 , ..., zm , alors tout mot de code zi peut être écrit comme
m
X
zi = ui,k zk
k=1
où ui est le vecteur ligne (ui,1 , ..., ui,m ) et G la matrice dont les lignes sont z1 , ..., zm .
Il est alors tout naturel de choisir de coder le message à m symboles par le mot de code zi qui
résulte de la multiplication par G ci-dessus.
Pour cette raison, la matrice G est appelée matrice génératrice∗ du code.6
5
Rappel : dans la plupart des cas, le choix n’est pas unique
6
Notez que, pour un code donné, cette matrice génératrice n’est pas unique : elle dépend de la base choisie pour
représenter le code.
184 CHAPITRE 11. CODES CORRECTEURS D’ERREURS
Définition 11.8 (Matrice Génératrice) Une matrice m × n G est dite matrice géné-
ratrice d’un code linéaire (n, m) C si et seulement si ses m vecteurs ligne sont une
base de l’espace vectoriel C.
Le codage d’un message u (de taille m) est alors effectué par z = u · G. ¨
L’utilisation d’une matrice génératrice rend le codage très facile à implémenter en pratique.
Dans le cas binaire par exemple, seuls quelques7 portes « ou »-exclusif (XOR) peuvent réaliser
le codage.
Parmi toutes les matrices génératrices possibles, une d’entre elles est particulièrement intéres-
sante (si elle existe) : celle sous forme systématique.
Définition 11.9 (Forme Systématique) Une matrice génératrice G d’un code li-
néaire (n, m) est dite sous forme systématique si elle est de la forme
1 0 · · · 0 p1,1 · · · p1,n−m
0 1 · · · 0 p2,1 · · · p2,n−m
G = [Im P ] = . . .
.. .. . . ... ..
.
..
.
..
.
0 0 ··· 1 pm,1 · · · pm,n−m
7
au plus n · (m − 1), en fait
11.2. CODES LINÉAIRES 185
Notez que, lorsqu’elle existe pour un code donné, la matrice génératrice systématique est
unique.
Définition 11.10 (Code Linéaire Systématique) Un code linéaire utilisant une ma-
trice génératrice sous forme systématique est appelé code (linéaire) systématique. ¨
Lorsqu’un code linéaire (n, m) utilise une matrice génératrice de forme systématique, les m
premiers symboles des n symboles d’un mot de code sont exactement les symboles du message
codé :
zi = (ui,1 ui,2 ... ui,m zi,m+1 , ... zi,n )
En d’autres termes, les codes systématiques envoient d’abord le message non codé puis (n−m)
symboles de codage utilisés pour la détection/correction d’erreurs.
Exemple 11.13 Si on se rappelle l’exemple 11.12, un autre choix pour les vecteurs de la base
aurait pu être z1 = 1011, z2 = 0110, ce qui donne
· ¸
1 0 1 1
G=
0 1 1 0
Exemple 11.14 (Bit de vérification de parité) Pour les messages binaires, le bit de vérifi-
cation de parité est le bit qui correspond à la parité du message, c.-à-d. à la somme (binaire)
de ses bits.
Par exemple, le bit de vérification de parité pour 01101 est 1 + 1 + 1 = 1 et le bit de
vérification de parité pour 00101 est 1 + 1 = 0.
Le code par bit de parité consiste simplement à envoyer d’abord le message tel quel, suivi de
son bit de parité. En termes de codes, ceci correspond au code binaire linéaire (m + 1, m),
dont la matrice génératrice est
1
G = Im ...
1
qui est sous forme systématique.
Notez que la distance minimale de ce code est 2 (en utilisant le théorème 11.2), ce code n’est
donc capable de faire que de la détection d’erreurs uniques (voir théorème 11.1).
Évaluation 50
À ce niveau, nous savons comment coder avec des codes linéaires. Mais qu’en est-il du dé-
codage ? Comment les erreurs peuvent-elles être corrigées ? Après tout, c’est bien là toute
l’histoire !
C’est précisément maintenant que la linéarité des codes est importante.
Supposons avoir trouvé une matrice F telle que, pour tout mot de code z, z · F = 08 . Alors, si
une erreur e survient durant la transmission de z et zb = z + e est reçu, nous avons
zb · F = (z + e) · F = z · F + e · F = 0 + e · F = e · F
Ce denier résultat est très utile comme zb · F est indépendant du mot de code z émis mais
ne dépend que de l’erreur e. Le résultat de cette erreur de transmission apparaît comme une
combinaison linéaire des lignes de F . Pour corriger/détecter l’erreur, les vecteurs de l’espace
vectoriel généré par les lignes de F doivent « simplement » correspondre au message de cor-
rection (ou de détection) correspondant.
Ceci est l’idée-clé qui va maintenant être formalisée et étudiée un peu plus profondément.
Pour de bonnes raisons mathématiques9 , l’équation ci-dessus z · F = 0 est toujours donnée
sous la forme suivante :
z · HT = 0
où T est l’opérateur de transposition et H = F T .
∀z ∈ GF(D)n z · H T = 0 ⇐⇒ z ∈ C
En d’autres termes, une matrice de vérification pour un code C est une matrice dont
le noyau est C. ¨
8
Comme vous le verrez dans un moment, ce n’est pas si difficile.
9
orthogonalité : G · H T = 0
11.2. CODES LINÉAIRES 187
Notez qu’un code linéaire donné pourrait avoir plusieurs matrices de vérification différentes :
toute matrice dont les lignes sont une base de l’espace vectoriel orthogonal au code linéaire10
est une matrice de vérification pour ce code.
Comment trouver des matrices de vérification ?
Dans le cas où le code est systématique, il est facile de trouver une matrice de vérification,
comme le montre le théorème suivant :
Théorème 11.3 Pour un code linéaire (n, m) systématique dont la matrice généra-
trice sous forme systématique est
G = [Im P ] ,
la matrice £ ¤
H = −P T In−m
est une matrice de vérification.
zi = u i · G
= ui · [Im P ]
c.-à-d. ½
(zi,1 , ..., zi,m ) = ui
(zi,m+1 , ..., zi,n ) = ui · P
Donc
(zi,m+1 , ..., zi,n ) = (zi,1 , ..., zi,m ) · P
c.-à-d.
−(zi,1 , ..., zi,m ) · P + (zi,m+1 , ..., zi,n ) = 0
ou, sous forme matricielle :
· ¸
−P
zi · =0
In−m
£ ¤T
Nous avons donc trouvé une matrice ( −P T In−m ) telle que son produit avec chaque mot
de code donne le vecteur nul.
Il est aisé de voir que la construction inverse a pour résultat que chaque mot x tel que x ·
£ ¤T
−P T In−m = 0 vérifie
x = (x1 , ..., xm ) · G
et se trouve donc être un mot de code. ¥
10
rappel : un code linéaire est un sous-espace vectoriel
188 CHAPITRE 11. CODES CORRECTEURS D’ERREURS
Alors (n = 5 et m = 2)
"· #
¸T 1 1 1 0 0
1 0 1
H= I3 = 0 1 0 1 0
1 1 1
1 1 0 0 1
Évaluation 51
Donnez une matrice de vérification pour le code linéaire dont la matrice de codage sous forme
systématique est
1 0 0 0 0 1 0 1 0
0 1 0 0 0 1 1 0 0
G= 0 0 1 0 0 0 1 0 1
0 0 0 1 0 1 1 1 1
0 0 0 0 1 0 0 1 1
Évaluation 52
Le mot z =1001101 est-il un mot de code du code dont une matrice de vérification est
1 1 1 0 1 0 0
H = 0 1 1 0 0 1 0 ?
0 0 1 1 0 0 1
11.2.6 Syndromes
zb · H T = (z + e) · H T = z · H T + e · H T = 0 + e · H T = e · H T
Ceci illustre le fait important que zb · H T ne dépend que du schéma d’erreur effectif e et absolu-
ment pas du mot de code transmis zb. Pour cette raison, ce résultat zb · H T est d’une importance
particulière pour le décodage. Ceci est appelé syndrome (de zb relatif à H).
Définition 11.12 (Syndrome) Le syndrome∗ d’un mot zb relatif à une matrice de vé-
rification H est le produit zb · H T . ¨
11.2. CODES LINÉAIRES 189
En outre, le schéma d’erreur e est décomposé en erreurs élémentaires ek (c.-à-d. faites d’une
seule erreur sur un seul symbole) : e = (e1 , ..., en ), alors
X
z ) = zb · H T = e · H T =
s(b ek hk
k
Exemple 11.16 (Tableau de correction basée sur les syndromes) Supposons que
1 1 1 0 0
H= 0 1 0 1 0
1 1 0 0 1
Syndrome Correcteur
101 10000
111 01000
100 00100
010 00010
001 00001
Syndrome Correcteur
000 00000
001 00001
010 00010
011 ?
100 00100
101 10000
110 ?
111 01000
Notez que :
190 CHAPITRE 11. CODES CORRECTEURS D’ERREURS
1. Le syndrome nul pointe toujours vers aucune correction, à cause de la définition 11.11 ;
2. Pour 011 et 110, le correcteur n’est dans cet exemple pas unique : par exemple 011 =
010 + 001 donne 00011 (00001 + 00010), mais 011 = 111 + 100 donne une autre
correction, 01100.
Ceci est dû au fait que la distance minimale de ce code est 3 (voir section suivante), et
que ce code ne peut donc corriger que tous les schémas à 1 erreur, mais pas tous les
schémas à 2 erreurs !
Ces deux syndromes correspondent en fait à deux erreurs de transmission.
En pratique, le tableau de correspondance entre les syndromes et les erreurs est stocké dans une
mémoire, et le mécanisme général pour décoder (et corriger) un message reçu zb est le suivant :
z ) = zb · H T ;
1. Calculer le syndrome s(b
2. Obtenir la correction c = −e (c.-à-d. l’opposé de l’erreur) par la combinaison linéaire
des correcteurs stockés en mémoire ;
3. Décoder z = zb + c.
Exemple 11.17 (Décodage avec un Code Linéaire) Continuons avec le dernier exemple
(exemple 11.16), dont la génératrice est
· ¸
1 0 1 0 1
G=
0 1 1 1 1
Supposons devoir transmettre u = 10. Ce message est codé par z = 10101 avec le code
linéaire binaire (5, 2) ci-dessus.
Supposons que zb = 00101, c.-à-d. que le premier bit ait été corrompu.
Le calcul du syndrome donne s = zb · H T = 101, ce qui nous donne le correcteur e = 10000
(voir tableau des correcteurs donné dans l’exemple 11.16).
Le mot de code décodé est ainsi zb+e = 00101+10000 = 10101, ce qui nous donne le mes-
sage décodé (les deux premiers bits correspondant au message originel, un code systématique
ayant été utilisé) : 10, ce qui correspond au message originel.
Évaluation 53
0 0 1 1 1 0 0 0 1
La présentation générale des codes linéaires se termine maintenant par un résultat utile, qui
permet le calcul de la distance minimale d’un code 11 directement depuis sa matrice de vérifi-
cation.
11
et donc le nombre maximal d’erreur pouvant être corrigées
11.2. CODES LINÉAIRES 191
D ÉMONSTRATION Pour tout vecteur z, z·H T est une combinaison linéaire de w(z) colonnes
de H. Et, par la définition 11.11 : z ∈ C si et seulement si z · H T = 0.
Ainsi, si z ∈ C, il existe alors w(z) colonnes de H qui sont linéairement dépendantes ; et
réciproquement, si q colonnes de H sont linéairement dépendantes, il existe un mot de code
de poids q.
Donc wmin (C) est le nombre minimal de colonnes de H qui sont linéairement dépendantes,
et on conclut en utilisant le théorème 11.2. ¥
Pour un code linéaire binaire C avec un matrice de vérification H, ce résultat implique que
– Si H n’a pas de colonne nulle, dmin (C) > 1.
– Si H n’a en outre pas deux fois la même colonne, dmin (C) > 2.
Exemple
11.18 Un code linéaire binaire dont une matrice de vérification est H =
1 1 1 0 0
0 1 0 1 0 a une distance minimale de 3.
1 1 0 0 1
En effet, H n’a pas de colonne nulle, ni deux fois la même colonne, donc dmin (C) > 2. En
outre, il y a un ensemble de 3 colonnes de H qui sont linéairement dépendantes. Par exemple,
h1 , h3 et h5 .
dmin (C) ≤ n − m + 1.
D ÉMONSTRATION Les colonnes de H sont des vecteurs de GF(D)(n−m) , donc tout en-
semble de n − m + 1 de ces colonnes est linéairement dépendant. Donc, en utilisant le
théorème 11.4, dmin (C) ≤ n − m + 1. ¥
Évaluation 54
Quelle est la distance minimale d’un code dont la matrice de vérification est
1 1 0 1 0 1 0 0 0
0 1 1 1 0 0 1 0 0
H= 1 0 0 1 1 0 0 1 0 ?
0 0 1 1 1 0 0 0 1
Étudions maintenant plus en profondeur quels sont les « bons » codes, qui peuvent corriger
une erreur (dans le cas binaire).
Comme nous ne cherchons qu’une seule erreur, le syndrome n’a besoin d’indiquer que la
position où se trouve l’erreur. L’idée est de disposer d’un code dont le syndrome indique di-
rectement la position de l’erreur ; par exemple sous forme de son code binaire (0...001 pour la
première position, 0...010 pour la seconde, 0...011 pour la troisième, etc.).
Rappel : une erreur simple en position k donne un syndrome qui est la k-ème colonne de H.
L’idée ci-dessus est donc de construire une matrice de vérification dont les colonnes sont les
représentations binaires de leur position (voir exemple ci-dessous).
Ce qui n’est pas encore clair est
1. quelles dimensions cette matrice de vérification devrait avoir ?
2. cette construction mène-t-elle effectivement à une matrice de vérification d’un code ?
3. un tel code peut-il effectivement corriger tous les schémas à 1 erreur ?
A propos du premier point, rappelez-vous que la taille d’un syndrome d’un code linéaire (n, m)
est n − m. Si le syndrome code directement la position de l’erreur, il pourrait alors représenter
2n−m − 1 positions. Aucune place n’est donc perdue si le nombre total de positions à repré-
senter (c.-à-d. la longueur n du mot de code) est n = 2n−m − 1.
En dépit du cas trivial n = 3, m = 1, voici quelques tailles possibles pour de tels codes :
n m r =n−m
7 4 3
15 11 4
31 26 5
63 57 6
.. .. ..
. . .
Il est facile de répondre à la deuxième question ci-dessus : oui, cette construction donne un
code linéaire comme les matrices construites de cette façon sont de rang plein (c.-à-d. que
rank(H) = n − m), puisqu’il est aisé de construire la matrice identité In−m à partir de leurs
colonnes (prendre la première, deuxième, quatrième, huitième colonne, etc.). La dimension de
leur noyau est donc m, ce qui donne un code linéaire (n, m).
Finalement, pour répondre à la dernière question (un tel code peut-il effectivement corriger
tous les schémas à 1 erreur ?), nous devons calculer sa distance minimale. Les matrices de
vérification résultant de la construction ci-dessus n’ont jamais de colonne nulle ni deux fois
11.2. CODES LINÉAIRES 193
la même colonne, et donc au minimum dmin (C) ≥ 3. En outre, les trois premières colonnes
(représentations binaires de 1, 2 et 3) sont toujours linéairement indépendantes. La distance
minimale de tels codes est donc toujours 3. De tels codes peuvent donc corriger tous les sché-
mas à 1 erreur.
De tels codes sont appelés « codes de Hamming (binaires) ».
Propriété 11.13 Tout code de Hamming binaire peut corriger tous les schémas à une
erreur.
Pour trouver la matrice génératrice, nous cherchons 4 vecteurs z tels que z · H T = 0, par
exemple (facile à vérifier, et il y en a beaucoup d’autres) :
z1 = 1110000
z2 = 1101001
z3 = 1000011
z4 = 1111111
ce qui donne
1 1 1 0 0 0 0
1 1 0 1 0 0 1
G=
1
0 0 0 0 1 1
1 1 1 1 1 1 1
en troisième position) qui est 0001111, ce qui est effectivement le mot de code émis.
code linéaire : un code par bloc qui est un espace vectoriel (c.-à-d. que toute combinaison
de mots de code est aussi un mot de code).
Un code linéaire (n, m) D-aire est un sous-espace vectoriel de dimension m de l’es-
pace vectoriel de dimension n de mots de code D-aires.
distance minimale : pour les codes linéaires, la distance minimale est égale au poids mini-
mal.
matrice génératrice : (d’un code linéaire (n, m)) une matrice m × n dont les lignes sont
une base du code (elle sont donc linéairement indépendantes).
forme systématique : une matrice génératrice m × n d’un code linéaire (n, m) est dite sous
forme systématique seulement si sa sous-matrice m × m la plus à gauche est la matrice
identité (de taille m).
codage : le codage avec des codes linéaires est effectué par multiplication matricielle : le
mot u à coder est multiplié par une matrice génératrice du code choisie G, produisant
le mot de code z = u · G.
Si la matrice génératrice est sous forme systématique, les m premiers symboles du mot
de code sont exactement les symboles du message. Ainsi, seuls les n − m derniers
symboles doivent être calculés.
matrice de vérification : une matrice (n − m) × n H est une matrice de vérification pour
un code linéaire (n, m) C si et seulement si
∀z ∈ GF(D)n z · H T = 0 ⇐⇒ z ∈ C
11.3.1 Introduction
Bien que les codes cycliques soient la catégorie de codes correcteurs d’erreurs dont l’utilisation
est la plus répandue, seule une introduction très courte de ce sujet est présentée ici. En effet, une
présentation approfondie des codes cycliques constituerait à elle seule un cours à part entière,
et est donc hors de propos ici. Le lecteur intéressé à approfondir le sujet pourra se référer à la
littérature plutôt vaste dans de ce domaine.
Définition 11.14 Un code cyclique∗ est un code linéaire tel que, pour tout mot de
code zi à n symboles zi = zi,1 ...zi,n , le mot zi,2 ...zi,n zi,1 résultant d’une permutation
cyclique (vers la gauche) (aussi appelée « décalage ») des symboles de zi soit aussi
un mot de code. ¨
Notez que cette définition implique alors que toute permutation cyclique d’un mot de code soit
aussi un mot de code.
Exemple 11.20 (Code cyclique) Le code linéaire (binaire) suivant est un code cyclique :
(qui est linéaire) n’est pas cyclique car, par exemple, la permutation cyclique 100 de z3 n’est
pas un mot de code.
Les codes cycliques sont une sous-catégorie importante des codes linéaires car ils possèdent
beaucoup de propriétés algébriques qui simplifient les implémentations du codage et du déco-
dage.
Évaluation 55
Pour chacun des codes binaires suivants, spécifiez s’il s’agit ou non d’un code cyclique.
1. C = {0000, 1000, 0001, 1001}
2. C = {1000, 0001, 0100, 0010}
196 CHAPITRE 11. CODES CORRECTEURS D’ERREURS
n−1
X
X · zi (X) = zi,1 + zi,k+1 · X n−k
k=1
n−1
X
= zi,k+1 · X n−k + zi,1 · X n−n
k=1
ce qui correspond effectivement au mot de code zi,2 ...zi,n zi,1 , le résultat du décalage vers la
gauche de zi . ¥
Comme les codes cycliques traitent justement de la permutation cyclique de leurs mots de
code, les polynômes semblent être un moyen tout à fait approprié pour les représenter. Cet
aspect sera approfondi après un court exemple.
11.3. CODES CYCLIQUES 197
Exemple 11.21 (Arithmétique modulo (X n − 1)) Voici un court exemple d’un calcul
modulo (X n − 1) :
(X 2 + 1) · (X + 1) = X 3 + X 2 + X + 1
= 1 + X 2 + X + 1 mod (X 3 − 1)
= X 2 + X + (1 + 1) mod (X 3 − 1)
= X2 + X mod (X 3 − 1)
car en binaire 1 + 1 = 0.
Exemple 11.22 (Représentation polynômiale d’un code cyclique) Revenons sur le code
cyclique binaire de l’exemple précédent :
z1 (X) = 0
z2 (X) = 1 · X 2 + 0 · X + 1 = X 2 + 1
z3 (X) = 0 · X 2 + 1 · X + 1 = X + 1
z4 (X) = 1 · X 2 + 1 · X + 0 = X 2 + X
Notez en outre que X · z2 (X) = z3 (X) mod (X 3 − 1), ce qui est l’expression du fait que
z3 est le décalage vers la gauche de z2 .
Évaluation 56
Évaluation 57
Considérant les deux mots de code z1 et z2 d’un code cyclique, que vaut z1 · z2 dans les cas
suivants :
1. z1 = 010110, z2 = 000100
2. z1 = 1010, z2 = 0101
3. z1 = 11001, z2 = 01010
La condition définissant les codes cycliques peut maintenant être utilisée pour caractériser plus
avant les codes cycliques en utilisant les propriétés des polynômes :
198 CHAPITRE 11. CODES CORRECTEURS D’ERREURS
Théorème 11.5 Pour tout code cyclique (n, m) C, il existe un polynôme gC (X) de
degré n − m tel que
c.-à-d. que tout polynôme d’un mot de code est un multiple de gC (X), et réciproque-
ment.
En d’autres termes, le code C est généré par gC (X). gC (X) est en fait appelé le
générateur de C.
Le codage d’un mot u en utilisant un code cyclique C pourrait alors simplement consister
à envoyer z(X) = u(X) · gC (X). Toutefois, le codage sous forme systématique, c.-à-d. le
codage de manière à ce que les premiers symboles correspondent au message lui-même, est
souvent préféré.
Pour un code cyclique (n, m), la procédure est alors la suivante :
1. multiplier le polynôme du message u(X) par X n−m (ce qui revient en pratique à effec-
tuer n − m décalages vers la gauche sur le message) Notez que n − m est le degré du
générateur.
2. diviser X n−m u(X) par le générateur g(X) et obtenir le reste r(X)
3. le codage de u(X) est alors z(X) = X n−m u(X) − r(X) (qui est un multiple de g(X),
dont les m symboles les plus élevés correspondent aux m symboles de u).
Exemple 11.23 (Codage systématique avec un code cyclique) Considérons par exemple
le code cyclique binaire (7, 4)
X 2 + 1.
Divisons tout d’abord X 3 u(X) = X 6 + X 5 + X 3 par g(X) :
X 6 +X 5 + X3 X3 + X + 1
6
X + X +X 3
4 X3 + X2 + X + 1
X 5+ X 3 +X 2
4
X + X 2 +X
X 3+ X+1
1
Évaluation 58
Comment les messages suivants sont-ils codés sous forme systématique avec un code, dont le
générateur est g(X) = X 6 + X 3 + 1 :
1. 000
2. 111
3. 101
11.3.3 Décodage
Nous savons maintenant comment coder des messages avec des codes cycliques. Qu’en est-il
alors du décodage ?
Le processus de décodage est similaire au cadre utilisé pour les codes linéaires en général :
1. d’abord calculer un syndrome à partir du mot reçu (qui ne dépend que de l’erreur, pas
du mot émis, et qui est nul lorsque le mot reçu est un mot de code)
2. en déduire le correcteur (l’opposé de l’erreur)
3. finalement, appliquer le correcteur au mot de code reçu.
La construction du syndrome d’un mot zb(X) est simple : c’est le reste de la division de zb(X)
par le générateur g(X) de ce code.
En effet, nous savons que chaque mot de code z(X) est un multiple de g(X). Le reste de
z(X) + e(X) (par rapport à g(X)) est le même que celui de e(X) :
¾
z(X) = α(X)g(X)
=⇒ z(X) + e(X) = [α(X) + β(X)]g(X) + s(X)
e(X) = β(X)g(X) + s(X)
Les correcteurs, qui correspondent à tous les syndromes non nuls, peuvent être obtenus par
division par g(X). Notez que
– pour une erreur seule X i de degré i inférieur à n − m (le degré de g(X)), le syndrome est
simplement X i ;
– pour l’erreur seule X (n−m) , le syndrome est X (n−m) − g(X).
Exemple 11.24 (Décodage avec un code cyclique) Continuons l’exemple précédent : le
message 1101 a été codé en 1101001 et est maintenant transmis à travers un canal bruité.
Supposons que le second symbole ait été changé, c.-à-d. que nous recevions 1001001. Quel
est le mot décodé correspondant ?
1001001 correspond à zb(X) = X 6 + X 3 + 1, dont la division par g(X) donne :
X 6+ X 3+ 1 X3 + X + 1
X +X +X 3
6 4 X3 + X
X 4+ X 2 +X
X 2 +X+1
syndrome correcteur
1 1
X X
X2 X2
X +1 X3
X2 + X X4
X2 + X + 1 X5
X2 + 1 X6
[Les quatre premières lignes ont été obtenues en utilisant les remarques ci-dessus. Les trois
dernières par division de l’erreur par g(X)]
Nous avons donc trouvé que le correcteur doit être X 5 et que le mot décodé est finalement
z(X) = zb(X) + X 5 = X 6 + X 5 + X 3 + 1, c.-à-d. 1101001.
Comme un code systématique a été utilisé, les 4 premiers symboles de ce mot de code sont
les 4 bits du message originel : 1101.
Évaluation 59
Considérons le code linéaire (7, 4) dont le générateur est g(X) = X 3 + X 2 + 1. Comment les
messages reçus suivants seront-ils décodés ?
1. 1001011
2. 1011001
3. 0000001
(en supposant un codage sous forme systématique).
11.4. CODES CONVOLUTIONNELS 201
Code cyclique : un code linéaire tel que tout décalage (des symboles) de tout mot de code
est aussi un mot de code.
représentation polynômiale : z = z1 ...zn est représenté par le polynôme z(X) = z1 ·
X n−1 + z2 · X n−2 + ... + zn−1 · X + zn , c.-à-d. que le j-ème symbole zj d’un mot de
code z de taille n est le coefficient de X n−j dans le polynôme correspondant z(X).
La multiplication polynômiale par X (monôme du premier degré) correspond au déca-
lage (d’une position) vers la gauche.
Toutes les opérations sont faites modulo X n − 1.
générateur : Pour tout code cyclique, il existe un polynôme tel que tout polynôme représen-
tant un mot de code en soit multiple, et réciproquement.
codage sous forme systématique : La méthode de codage telle que les m premiers sym-
boles d’un mot de code sont exactement les m symboles du message codé.
Pour les codes cycliques, le codage sous forme systématique est accompli par les étapes
suivantes :
1. multiplier le polynôme du message u(X) par X n−m
2. diviser X n−m u(X) par le générateur g(X) et obtenir le reste r(X)
3. coder u(X) par z(X) = X n−m u(X) − r(X).
décodage : Le processus de décodage est similaire au cadre utilisé pour les codes linéaires
en général :
1. calculer le syndrome du mot reçu : c’est le reste de la division de ce mot par le
générateur du code ;
2. en déduire le correcteur à partir d’un calcul préalable de la correspondance syn-
dromes/correcteurs (la multiplication du générateur par le correcteur donne le
syndrome)
3. finalement, appliquer le correcteur au mot de code reçu et décoder les mots ori-
ginels comme les m premiers symboles du mot de code décodé (à condition que
le codage systématique ait été utilisé).
z 2i−1
+
mise en série
z 2i−1z 2i
ui u i−1 u i−2
+
z 2i
11.4.1 Introduction
Dans cette section, un schéma de codage qui n’est pas par bloc est considéré : les codes convo-
lutionnels. Les codes convolutionnels diffèrent des codes par bloc par le fait que le mécanisme
de codage garde en mémoire les symboles codés.
En un sens, les codes convolutionnels peuvent être considérés comme des codes par bloc sans
limites, c.-à-d. des codes par bloc avec des blocs de taille « infinie ». Toutefois, il y a une
différence significative dans la conception de ces techniques de codage/décodage. En outre,
les codes convolutionnels se sont montrés bien supérieurs aux codes par bloc dans beaucoup
d’applications.
11.4.2 Codage
Le point de départ d’un code convolutionnel est le codeur. Plutôt que de commencer avec
des définitions précises et une analyse générale des codes convolutionnels, nous préférerons
commencer avec un exemple simple qui contient toutefois les caractéristiques principales du
codage convolutionnel.
Le codeur de l’exemple choisi pour cette section est représenté dans la figure 11.1.
A chaque pas de temps i, un symbole ui du message entre dans le codeur et deux sym-
boles de mot de code z2i−1 z2i sont émis ; c.-à-d. que u = (u1 , ..., ui , ...) est codé en z =
(z1 , z2 , ..., z2i−1 , z2i , ...). Le taux de ce code est donc 1/2.
Les symboles ui du message et les symboles zj du mot de code considérés ici sont tous des
chiffres binaires. Les additions montrées dans la figure 11.1 sont des additions binaires (c.-à-d.
des « ou exclusifs »).
De manière plus formelle, le codeur représenté dans la figure 11.1 peut être écrit comme
c.-à-d.
ui 7→ (ui−2 + ui , ui−2 + ui−1 + ui )
Ces équations peuvent être vues comme une « convolution discrète » de la séquence d’entrée
avec les séquences 1, 0, 1, 0, 0, . . . et 1, 1, 1, 0, 0, . . . respectivement. Ceci explique le terme de
« code convolutionnel ».
11.4. CODES CONVOLUTIONNELS 203
Toutefois, ni les équations ci-dessus, ni la figure 11.1 ne déterminent complètement les mots de
code, comme les valeurs de ui−2 et de ui−1 sont requises. Quelles sont-elles au temps i = 1,
c.-à-d. quel est l’état initial du système ?
La convention est qu’ils sont toujours nuls, c.-à-d. u−1 = u0 = 0.
Pour être sûr que ce soit toujours le cas, c.-à-d. que chaque fois qu’un nouveau message doit
être codé l’état initial du codeur soit toujours 0 dans toutes les mémoires, le codage d’un
message précédent doit laisser le codeur dans cet état nul. Tout codage d’un message doit
donc contenir assez de zéros à la fin pour être sûr que toutes les mémoires du système soient
revenues à 0. Dans le cas de le codeur présenté dans la figure 11.1, ceci revient à dire que le
codage de chaque message se terminera par le codage de deux zéros ou plus.
Exemple 11.25 (Codage avec un code convolutionnel) Supposons vouloir envoyer le mes-
sage u = 101 en utilisant le codeur représenté dans la figure 11.1. Comment cela marche-t-
il ?
Traçons tous les composants du codage :
Évaluation 60
Considérons le code convolutionnel, dont le codeur est décrit par le diagramme suivant :
z 4i−3
+
z 4i−2
mise en série
Demandons-nous maintenant quel est en général le code généré par le codeur représenté dans
la figure 11.1 ?
Considérons par exemple un message de 3 bits u = (u1 , u2 , u3 ). Comme nous l’avons vu, ce
qui doit être effectivement codé est (u1 , u2 , u3 , 0, 0), c.-à-d. que deux bits zéro sont ajoutés à
la fin du message originel de façon à remettre la mémoire du codeur dans son état initial. La
taille du mot de code correspondant est ainsi 2 · 5 = 10.
Les bits de ces mots de code sont donnés par les équations (11.1) et (11.2), c.-à-d. sous forme
matricielle :
1 1
(z2i−1 , z2i ) = (ui−2 , ui−1 , ui ) · 0 1 (11.3)
1 1
Le mot de code entier z est ainsi obtenu en multipliant (u1 , u2 , u3 , 0, 0) par la matrice
1 1 0 1 1 1 0 0 0 0
0 0 1 1 0 1 1 1 0 0
G3 =
0 0 0 0 1 1 0 1 1 1 ,
0 0 0 0 0 0 1 1 0 1
0 0 0 0 0 0 0 0 1 1
Définition 11.15 Un code convolutionnel (n, k, r) D-aire est un code linéaire non
borné, dont la matrice génératrice est de la forme suivante (infinie) :
F0 F1 F2 · · · Fr [0] [0] [0] · · ·
[0] F0 F1 · · · Fr−1 Fr [0] [0] · · ·
G = [0] [0] F · · · F
0 r−2 Fr−1 Fr [0] · · ·
.. .. . . .. .. ..
. . . . . .
avec Fi une matrice k × n, et [0] la matrice nulle k × n ; c.-à-d. que chaque ensemble
de k lignes de G est le même que l’ensemble de k lignes précédent mais décalé de n
places vers la droite.
Un message u de longueur finie m, u = (u1 , §..., ¨um ) est codé en z = u · Gm′ où u
est le vecteur de longueur m′ = qk, avec q = m k , tel que u = (u1 , ..., um , 0, ..., 0),
et où Gm′ est la sous-matrice supérieure gauche de G de taille qk × n(r + q).
Notez que u = u, c.-à-d. que m′ = m si m est un multiple de k (en particulier lorsque
k = 1 !). ¨
Dans la définition ci-dessus, k correspond en fait au nombre de symboles du message qui vont
dans le codeur (k lignes d’entrée), n est le nombre de symboles de mot de code sortants par
entrée (n lignes de sortie) et r le nombre maximal de mémoires (aussi appelées « registres »)
sur une ligne d’entrée.
Exemple 11.26 Le codeur montré en exemple dans la figure 11.1 construit un code convo-
lutionnel (2, 1, 2) : k = 1 ligne d’entrée avec r = 2 mémoires, produisant n = 2 bits de mot
de code pour chaque bit d’entrée.
Comme nous l’avons vu dans la section 11.4.2, pour un message d’entrée de longueur 3, sa
matrice génératrice est la matrice 3 × 10
1 1 0 1 1 1 0 0 0 0
G3 = 0 0 1 1 0 1 1 1 0 0
0 0 0 0 1 1 0 1 1 1
Notez que les codes convolutionnels sont linéaires : toute combinaison de mots de code est
aussi un mot de code (avec la convention que les mots de code plus courts sont rallongés avec
des zéros à la fin pour que la combinaison linéaire ait un sens, c.-à-d. que tous les mots ajoutés
aient la même longueur).
Évaluation 61
(b) (7, 4, 1)
(c) (3, 1, 4)
(d) (4, 1, 3)
(e) (7, 1, 4)
(f) (1, 3, 7)
2. Quelle est la matrice génératrice de ce code ?
(a) Combien de blocs F y a-t-il ?
(b) Quelle est la taille de chaque bloc F : ?×? ?
(c) Donnez tous les blocs F .
L’ « état » d’un système est l’ensemble des paramètres internes (mémoires, aussi appelées
« registres ») requis pour calculer la sortie correspondant à un bloc d’entrée donné. Pour le
codeur de la figure 11.1 par exemple, l’état au temps i est le contenu actuel des deux mémoires,
c.-à-d. Si = (ui−1 , ui−2 ).
Le comportement du codeur ne dépend que de son état et de l’entrée : un codeur à code
convolutionnel est une machine à état. L’ensemble de son fonctionnement est décrit par un
diagramme d’état.
Exemple 11.27 (Diagramme d’État) Par exemple, pour le codeur de la figure 11.1, nous
avons :
1 / 01
u i / z 2i-1 z 2i
11
1 / 10 0 / 10
0 / 01
10 01
1 / 00
1 / 11 0 / 11
00
0 / 00
où chaque nœud représente l’état du codeur c.-à-d. l’état des deux mémoires internes, le
11.4. CODES CONVOLUTIONNELS 207
label bleu est l’entrée qui provoque le changement d’état , et le rouge les symboles de sortie
correspondants.
Si par exemple, dans l’état 01, un 1 est reçu comme symbole d’entrée, l’état devient alors
10 et les deux symboles de sortie sont 00.
L’ensemble des mots de code d’un code convolutionnel (n, k, r), correspondant à tous les
messages
§m¨ de m bits possibles, est donc l’ensemble de toutes les séquences (de taille n(r +
k )) correspondant à tous les chemins de longueur m dans le diagramme d’état partant de
l’état nul (zéro partout) et reviennent à cet état nul.
Le déploiement dans le temps de tous les chemins de même longueur dans le diagramme d’état
est appelé treillis∗ de taille m du code convolutionnel (n, k, r).
Exemple 11.28 (Treillis) Pour le code (2, 1, 2) considéré dans les exemples précédents, le
treillis de longueur m = 3, représentant les codages de tous les messages d’entrée de 3 bits
est :
01
11 11
10 10
10
10
01 01 01
01 01
01 00
11
10 10 10 11
11
11 11
11
00 00 00 00 00
00 00 00 00 00 00
dans lequel l’arc le plus (dirigé vers le) haut sortant d’un nœud correspond au bit d’entrée 1
et le plus bas à 0.
Les trois premières colonnes d’arcs correspondent donc au codage de messages de 3 bits, et
les deux dernières colonnes d’arcs correspondent aux zéros terminaux13 , ces dernières n’ont
donc que des arcs pointant au plus bas.
Exemple 11.29 (Codage dans le Treillis) Par exemple, le codage du message u = 101 cor-
respond au chemin suivant :
01
11 11
10 10
10
10
01 01 01
01 01
01 00
11
11
10 10 10
11
11 11
11
00 00 00 00 00
00 00 00 00 00 00
c.-à-d. au mot de code z = 1101000111.
Évaluation 62
11.4.5 Décodage
Comme nous venons de le voir, un mot de code correspond à un chemin du nœud de départ au
nœud de fin du treillis.
Le décodage consiste alors à trouver le chemin le plus approprié correspondant au message
reçu à décoder. Dans le cadre du décodage à distance minimale, c.-à-d. le décodage du mot
de code avec un nombre minimal d’erreurs, « le chemin le plus approprié » signifie le chemin
avec la distance de Hamming minimale par rapport au message à décoder.
La recherche de ce chemin « le plus proche » peut être effectuée en utilisant la programmation
dynamique, c.-à-d. l’algorithme de Viterbi.
Cet algorithme décode un bloc de mot de code après l’autre (c.-à-d. des paquets de n bits du
message les uns après les autres), en ne gardant à chaque étape que les solutions localement op-
timales, c.-à-d. gardant, pour chaque nœud dans la colonne correspondant au bloc couramment
décodé, le meilleur chemin menant à ce nœud.
A la fin, le meilleur chemin trouvé pour le dernier nœud est le message décodé.
Ce qui est important et utile à propos de cet algorithme est que le nombre de meilleurs chemins
possibles qui sont gardés à chaque étape de temps est toujours inférieur ou égal au nombre
d’états de le codeur.
Donnons maintenant plus de précisions sur l’algorithme.
Introduisons tout d’abord un peu de notation. Pour chaque état s du codeur, soit γi (s) le
meilleur (c.-à-d. le plus proche, c.-à-d. avec un nombre d’erreurs minimal) décodage de lon-
gueur i finissant dans l’état s
γi (s) = min
z1 ,...,z2i
d(z1 ...z2i , zb1 ...b
z2i )
finissant en s
¡ n
¢
Le décodage complet correspond donc à γ|bz | (00) |b
z| = m + 2 = 2 ici où |b
z | est la longueur
du message à décoder.
Il est facile de voir que pour toute paire d’états de codage (s, s′ ), nous avons :
³ ´
γi (s) = z minz d(z2i−1 z2i , zb2i−1 zb2i ) + γi−1 (s′ ) .
2i−1 2i
de s′ à s
γ0 (00) = 0
Pouri de 1 à |b
z|
Pour touts
γi (s) = min
′
(d(z2i−1 z2i , zb2i−1 zb2i ) + γi−1 (s′ ))
s →s
Marquer le/un arc de s′ à s qui réalise le minimum
Reconstruire le chemin optimal en sens inverse, de l’état final à l’état nul initial.
Exemple 11.30 Supposons que le mot de code z = 1101000111 soit envoyé à travers un
canal bruité et que zb = 0101010111 soit reçu, c.-à-d. que deux erreurs soient survenues.
L’algorithme ci-dessus passera donc par les étapes suivantes, où le nombre minimal d’erreurs
γi (s) à ce point i est écrit en rouge au-dessus de chaque état s dans le treillis :
11 11
01 01 01
1
10 10 10
0 1
00 00 00 00 00
s
11.4. CODES CONVOLUTIONNELS 211
Évaluation 64
Quelle est la distance minimale du codeur donné dans les questions de contrôle précédentes ?
code convolutionnel : Un code convolutionnel (n, k, r) D-aire est un code linéaire illimité,
dont la matrice génératrice (infinie) est telle que chaque ensemble de k lignes est le
même que l’ensemble de k lignes précédent, mais décalé de n positions vers la droite.
Ceci correspond à la description matricielle de l’algorithme de codage, qui est souvent
donné sous forme de dessin d’un circuit avec k lignes d’entrée, n lignes de sortie et au
plus r mémoires sur un chemin d’entrée vers sortie.
codage : Un ¨ ′ u de longueur finie m, u = (u1 , ...,′ um ) est codé en z = u · Gm′ où
§ mmessage
q = k , m = qk, u est le vecteur de longueur m tel que u = (u1 , ..., um , 0, ..., 0),
et Gm′ la matrice supérieure gauche de taille qk × n(r + q) de la matrice génératrice.
état (interne) du codeur : l’ensemble des états des mémoires (ou registres) du codeur.
diagramme d’état : Le diagramme d’état d’un codeur est un graphe, dont les nœuds sont
tous les états internes possibles du codeur. Un arc entre un nœud Si et un nœud Sj
dans ce graphe représente le fait qu’il existe une entrée qui, lorsqu’elle est reçue dans
l’état Si amène le codeur dans l’état Sj .
Ces arcs sont étiquetés avec le(s) symbole(s) d’entrée et les symboles de sortie corres-
pondants.
représentation par treillis : La représentation du déploiement dans le temps de tous les
chemins possibles du diagramme d’état.
algorithme de décodage de Viterbi : L’algorithme de programmation dynamique qui, pour
un message à décoder donné, trouve le chemin « le plus court » (en termes d’erreurs)
dans le treillis.
R ÉSUMÉ DU CHAPITRE 11
code par bloc : un ensemble non vide de mots de même longueur, considérés comme des
« vecteurs ligne ».
poids : (d’un mot) le nombre de symboles non nuls.
distance de Hamming : le nombre de coordonnées par lesquelles deux vecteurs diffèrent.
La distance de Hamming entre deux mots est le poids de leur différence.
décodage à distance minimale : structure de correction d’erreurs dans laquelle chaque mot
reçu est décodé en le mot de code le plus proche (d’après la distance de Hamming).
décodage à vraisemblance maximale : structure de correction d’erreurs dans laquelle
chaque mot reçu zb est décodé en le (un des) mot(s) le(s) plus vraisemblable(s) z, c.-à-d.
un mot de code tel que P (Y = zb|X = z) soit maximale (avec X l’entrée du canal
212 CHAPITRE 11. CODES CORRECTEURS D’ERREURS
bruité et Y sa sortie).
distance minimale d’un code : la distance de Hamming minimale (non nulle) entre toute
paire de mots de code (différents).
capacité de correction et de détection d’erreurs : Un code par bloc C de longueur n uti-
lisant le décodage à distance minimale peut, pour toute paire d’entiers t et s tels que
0 ≤ t ≤ n et 0 ≤ s ≤ n − t, corriger tous les schémas à t ou moins erreurs et détecter
tous les schémas à t+1, ..., t+s erreurs si et seulement si sa distance minimale dmin (C)
est strictement supérieure à 2t + s :
code linéaire : un code par bloc qui est un espace vectoriel (c.-à-d. que toute combinaison
de mots de code est aussi un mot de code).
Un code linéaire (n, m) D-aire est un sous-espace vectoriel de dimension m de l’es-
pace vectoriel de dimension n de mots de code D-aires.
distance minimale d’un code linéaire : pour les codes linéaires, la distance minimale est
égale au poids minimal.
matrice génératrice d’un code linéaire : (d’un code linéaire (n, m)) une matrice m × n
dont les lignes sont une base du code (elle sont donc linéairement indépendantes).
forme systématique de la matrice génératrice d’un code linéaire : une matrice généra-
trice m × n d’un code linéaire (n, m) est dite sous forme systématique seulement
si sa sous-matrice m × m la plus à gauche est la matrice identité (de taille m).
codage avec un code linéaire : le codage avec des codes linéaires est effectué par multipli-
cation avec une matrice : le mot u à coder est multiplié par une matrice génératrice du
code choisie G, produisant le mot de code z = u · G.
Si la matrice génératrice est sous forme systématique, les m premiers symboles du mot
de code sont exactement les symboles du message. Ainsi, seuls les n − m derniers
symboles doivent être calculés.
matrice de vérification d’un code linéaire : une matrice (n − m) × n H est une matrice de
vérification pour un code linéaire (n, m) C si et seulement si
∀z ∈ GF(D)n z · H T = 0 ⇐⇒ z ∈ C
symbole zj d’un mot de code z de taille n est le coefficient de X n−j dans le polynôme
correspondant z(X).
La multiplication polynômiale par X (monôme du premier degré) correspond au déca-
lage (d’une position) vers la gauche.
Toutes les opérations sont faites modulo X n − 1.
générateur d’un code cyclique : Pour tout code cyclique, il existe un polynôme tel que tout
polynôme représentant un mot de code en soit multiple, et réciproquement.
codage sous forme systématique d’un code cyclique : La méthode de codage telle que les
m premiers symboles d’un mot de code sont exactement les m symboles du message
codé.
Pour les codes cycliques, le codage sous forme systématique est accompli par les étapes
suivantes :
1. multiplier le polynôme du message u(X) par X n−m
2. diviser X n−m u(X) par le générateur g(X) et obtenir le reste r(X)
3. coder u(X) par z(X) = X n−m u(X) − r(X).
décodage avec les codes cycliques : Le processus de décodage est similaire au cadre utilisé
pour les codes linéaires en général :
1. calculer le syndrome du mot reçu : c’est le reste de la division de ce mot par le
générateur du code ;
2. en déduire le correcteur à partir d’un calcul préalable de la correspondance syn-
dromes/correcteurs (la multiplication du générateur par le correcteur donne le
syndrome)
3. finalement, appliquer le correcteur au mot de code reçu et décoder les mots ori-
ginels comme les m premiers symboles du mot de code décodé (à condition que
le codage systématique ait été utilisé).
code convolutionnel : Un code convolutionnel (n, k, r) D-aire est un code linéaire non li-
mité, dont la matrice génératrice (infinie) est telle que chaque ensemble de k lignes est
le même que l’ensemble de k lignes précédent, mais décalé de n places vers la droite.
Ceci correspond à la description matricielle de l’algorithme codeur, qui est souvent
donné sous forme de dessin d’un circuit avec k lignes d’entrée, n lignes de sortie et au
plus r mémoires sur un chemin d’entrée vers sortie.
codage avec un code convolutionnel §: Un ¨ message u de longueur finie m, u = (u1 , ..., um )
est codé en z = u · Gm′ où q = m k , m′ = qk, u est le vecteur de longueur m′ tel que
u = (u1 , ..., um , 0, ..., 0), et Gm′ la matrice supérieure gauche de taille qk × n(r + q)
de la matrice génératrice.
état (interne) du codeur d’un code convolutionnel : l’ensemble des états des mémoires
(ou registres) du codeur.
diagramme d’état : Le diagramme d’état d’un codeur est un graphe, dont les nœuds sont
tous les états internes possibles du codeur. Un arc entre un nœud Si et un nœud Sj
dans ce graphe représente le fait qu’il existe une entrée qui, lorsqu’elle est reçue dans
l’état Si amène le codeur dans l’état Sj .
Ces arcs sont étiquetés avec le(s) symbole(s) d’entrée et les symboles de sortie corres-
pondants.
représentation par treillis : La représentation du déploiement dans le temps de tous les
chemins possibles du diagramme d’état.
214 CHAPITRE 11. CODES CORRECTEURS D’ERREURS
Histoire et bibliographie
Le travail sur les codes correcteurs d’erreurs est bien sûr parti du travail de pionnier de Shannon
en 1948. La conception de bons codes efficaces a commencé dans les années cinquante avec les
travaux de Hamming, Slepian et beaucoup d’autres. Pendant les années cinquante, la plupart
des travaux dans ce domaines étaient destinés au développement d’une vraie théorie du codage
(codes linéaires, codes par bloc et codes convolutionnels).
Les codes convolutionnels ont été présentés pour la première fois en 1955 par Elias [3] comme
une alternative aux codes par bloc. Wozencraft proposa plus tard une méthode de décodage
séquentiel efficace pour de tels codes [13]. Puis, en 1967, Viterbi proposa un algorithme de
décodage à vraisemblance maximale [12] assez facile à implémenter qui mène à plusieurs
applications des codes convolutionnels, en particulier aux communications avec les satellites
dans l’espace lointain.
Un déplacement de la théorie vers la pratique fut effectué dans les années soixante-dix, avec
une accroissement rapide des applications militaires et de communications spatiales.
Exercices du module I2
Exercice 12.1.1:
1 0 0 1 1
G= 0 1 0 1 1
0 0 1 0 0
b– Quelle est alors la distance minimale de ce code ? Combien d’erreurs peut-il au plus corri-
ger ?
1
Lorsque la matrice génératrice n’est pas donnée sous forme systématique, pour obtenir la forme systématique
équivalente on transforme la matrice à l’aide de permutations sur les lignes et/ou sur les colonnes, multiplications
de ligne ou colonne par un scalaire non nul ou encore par addition de lignes (mais l’addition de colonnes est
interdite !).
215
216 CHAPITRE 12. EXERCICES DU MODULE I2
Exercice 12.1.2:
Considérons le code linéaire binaire dont la partie parité est engendrée par les équations :
z5 = s2 + s3 + s4
z6 = s1 + s2 + s3
z7 = s1 + s2 + s4
z8 = s1 + s3 + s4
le mot de source étant composé des bits (u1 , u2 , u3 , u4 ) et le message codé : (z1 , z2 , z3 , z4 , z5 , z6 , z7 , z8 ).
a–
a– Quelle est la matrice génératrice de ce code (sous forme systématique) ?
b– Coder la séquence 010110010111.
c– Quelle est la matrice de vérification de ce code ?
d– Montrer que la distance minimale de ce code est 4.
e– Combien d’erreurs sur le mot transmis ce code peut-il corriger au maximum ? Combien
peut-il corriger de schémas d’erreur différents (c.-à-d. combien a-t-il de syndromes dif-
férents) ?
f– On envisage l’utilisation de ce code sur un canal symétrique binaire. Pour cela les 15 sché-
mas d’erreur à corriger choisis sont les 15 schémas d’erreur les plus probables. Écrire
la table de correction (c.-à-d. la table donnant pour chaque syndrome la correction à
appliquer).
g– À l’aide de la table précédente, décoder 1111110000001100.
Exercice 12.1.3:
Exercice 12.2.1:
Tous les codes cycliques de longueur n possibles2 sont obtenus en utilisant comme polynôme
générateur un diviseur de X n − 1.
Montrer qu’il existe uniquement 3 codes cycliques binaires non triviaux de longueur 3. Donner
le polynôme générateur dans chaque cas.
Remarque : en binaire, c.-à-d. sur le corps GF(2), X n − 1 et X n + 1 sont les même polynômes.
Exercice 12.3.1:
Considérons le système de codage convolutif suivant, émettant 3 bits pour tout bit du message
à coder :
+ 1
Séquenceur
ui ui−1 ui−2 + 2 X
+ 3
2
et non triviaux, c.-à-d. différent du code nul composé d’un seul mot de code, le vecteur nul
218 CHAPITRE 12. EXERCICES DU MODULE I2
Exercice 12.3.2:
Considérons le système de codage convolutif suivant, traitant le message d’entrée à coder par
blocs de 2 bits et émettant 3 bits pour chaque ensemble de 2 bits du message d’entrée :
b u2 i u2 i−2 + 1
Séquenceur
u2 i u2 i+1 + 2
b u2 i+1 u2 i−1 + 3
Module I3 : Cryptographie
Introduction
La cryptographie, comme le suggère sa racine grecque (« écriture cachée »), traite de la confi-
dentialité de l’information. Mais, dans son sens moderne, ce domaine scientifique couvre aussi
l’authenticité de l’information.
Dans cette « Ère de l’Information » dans laquelle nous vivons, la cryptographie ne peut plus
être ignorée. Elle est en effet devenue un outil standard, en particulier dans le domaine des
télécommunications. Comme l’information peut de nos jours être extrêmement précieuse et
avoir une valeur économique énorme, sa transmission par des canaux accessibles à tous, p.ex.
Internet, nécessite parfois une garantie de confidentialité et d’authenticité. Le but de la crypto-
graphie est de fournir de telles garanties.
Ce chapitre vous présente les notions de base de ce domaine plutôt moderne, et étudie de
manière plus formelle ses deux buts : la confidentialité et l’authenticité. En gros, le but de la
confidentialité est de s’assurer que le message est bien reçu par des personnes autorisées ; alors
que le but de l’authenticité est de s’assurer que le message a bien été envoyé par une personne
autorisée.
219
220 CHAPITRE 13. CRYPTOGRAPHIE
Fraudeur
DESTINATAIRE
cryptage décryptage
EXPÉDITEUR
C=e(M,K) D=d(C,K)
Message M canal public
Clé K
canal sécurisé
Le cadre général de la cryptographie est de coder des messages de manière à assurer leur
confidentialité ou leur authenticité.
Comme décrit dans le chapitre 5, un message M est une séquence de symboles d’un alphabet
Σ. En cryptographie, le codage du message est appelé cryptage ou chiffrement. Dans le cadre de
travail considéré dans ce chapitre, le cryptage sera effectué par l’utilisation d’une fonction e et
d’une clé K, qui est elle-même une séquence finie de symboles d’un alphabet, habituellement
mais pas nécessairement le même que l’alphabet du message Σ.
Le message crypté, ou cryptogramme, est alors C = e(M, K). La fonction de cryptage est
supposée ici déterministe. C est donc parfaitement déterminé une fois M et K donnés, c.-à-d.
H(C|M, K) = 0.
Le décryptage (ou déchiffrement) est effectué par une fonction d et la clé K, telle que (sans
surprise !) d(e(M, K), K) = M . Nous faisons l’hypothèse que le décryptage aussi est déter-
ministe, c.-à-d. H(M |C, K) = 0.
Notez que H(C|M, K) = 0 et H(M |C, K) = 0 n’impliquent pas que H(K|M, C) = 0 ;
plusieurs clés pourraient effectivement être possibles pour une paire (M, C) donnée. C’est
toutefois rarement le cas (et une mauvaise idée) en pratique, et donc H(K|M, C) vaut aussi
presque toujours 0.
La structure générale sur laquelle se concentre la cryptographie peut être résumée par le dessin
de la figure 13.1.
Le but de la cryptographie est de protéger le message contre
– une mauvaise réception (« confidentialité ») : il devrait être impossible d’obtenir le message
13.1. CADRE GÉNÉRAL 221
Avant d’étudier plus avant les notions fondamentales de la cryptographie avec des outils mo-
dernes de la théorie de l’information, donnons d’abord trois exemples historiques (mais pas
sûrs) de cryptogrammes : les chiffrements par substitution, par transposition, et le code de
Vigenère.
Substitution
Exemple 13.1 (Chiffrement par substitution) Considérons des messages faits de l’alpha-
bet habituel, fait de 27 lettres (l’espace blanc inclus !) : Σ = {A, ..., Z,′ ′ }. Une clé k , c.-à-d.
une permutation de Σ, possible pourrait être :
A → R
B → I
.. ..
. .
Y → B
Z → E
’ ’ → L
Transposition
Dans le chiffrement par transposition, la clé consiste en une permutation des d > 1 premiers
entiers (d fait aussi partie de la définition de la clé).
L’algorithme de cryptage est alors le suivant :
1. allonger le message avec des espaces blancs (moins de d − 1), de manière à ce que la
longueur du message soit un multiple de d ;
2. découper le message en blocs de longueur d ;
3. permuter les symboles de chaque bloc selon la permutation K.
Chiffrement de Vigenère
Le dernier exemple historique que nous voulons présenter est le chiffrement de Vigenère. Dans
ce système de cryptage, la clé est une séquence de symboles du même alphabet Σ que les
messages. En pratique, c’est très souvent un mot courant ou une phrase de quelques mots.
L’utilisation d’un ordre sur Σ (p.ex. l’ordre alphabétique) permet de transformer la clé en une
séquence d’entiers, p.ex. ’A’ = 1, ’B’ = 2, ..., ’Z’ = 26 et ’ ’ = 27.
De manière plus formelle, si
– n est la taille de Σ,
– i(a) est la position du symbole a dans Σ (d’après l’ordre choisi sur Σ), 1 ≤ i(a) ≤ n,
– σ(i) le i-ème symbole de Σ (1 ≤ i ≤ n, sinon considérer i mod n),
13.2. CONFIDENTIALITÉ PARFAITE 223
Exemple 13.3 (Chiffrement de Vigenère) Considérons encore une fois des messages faits
des 27 lettres de l’anglais (espace blanc inclus). La clé est alors une séquence de carac-
tères, par exemple k =’INFORMATION’. Comment le message ’VIGENERE CIPHER IS
ALSO QUITE SIMPLE’ est-il codé ?
Si nous décidons que la lettre ’A’ correspond à ’1’ et l’espace à 27, la lettre ’I’ corres-
pond alors à 9, et donc la première lettre du message , ’V’, est donc codée en ’V’+9=’D’, la
deuxième lettre du message ’I’ est codée en ’I’+’N’=’I’+14=’W’, la troisième lettre ’G’ en
’G’+’F’=’G’+6=’M’, etc.
Voici le codage complet :
VIGENERE CIPHER IS ALSO QUITE SIMPLE
INFORMATIONINFORMATIONINFORMATIONINF
DWMTERSYIRWYVKFRVTTJ FXNWI FFTAX YZK
c.-à-d. que le message codé est ’DWMTERSYIRWYVKFRVTTJ FXNWI FFTAX YZK’.
R ÉSUMÉ DU CHAPITRE 13
– La cryptographie vise à transmettre des messages de manière sécurisée (seules les per-
sonnes autorisées peuvent le lire) ou à authentifier des messages (aucune personne non-
autorisée n’aurait pu l’envoyer).
– Pour ce faire, les messages en clair M sont codés en utilisant une clé K et une fonction
déterministe : C = e(M, K).
– Les messages cryptés peuvent être décodés de manière déterministe en utilisant la fonction
de décodage d et la même clé K, de façon à ce que d(e(M, K), K) = M .
– H(C|M, K) = 0.
– H(M |C, K) = 0.
Dans la structure dépeinte dans la figure 13.1, où seuls les messages chiffré peuvent être captés
par des personnes non autorisées1 , le système sera sûr si le message chiffré n’amène aucune
information sur le message originel, c.-à-d. si
I(C; M ) = 0,
ce qui veut aussi dire que M et C sont des variables aléatoires indépendantes.
Théorème 13.1 Dans un système de chiffrement parfait, il doit exister au moins au-
tant de clés possibles que de messages possibles.
D ÉMONSTRATION
I(C; M ) = 0
implique que pout tout message m, P (C|M = m) = P (C).
Considérons maintenant un cryptogramme possible, c.-à-d. un message crypté c tel que
P (C = c) 6= 0.
Ainsi, pour chaque message originel possible m, on a P (C = c|M = m) 6= 0, ce qui veut
dire que pour chaque m il existe une clé, notée k(m), telle que c = e(k(m), m).
En outre, m 6= m′ =⇒ k(m) 6= k(m′ ) sinon le déchiffrement ne serais plus déter-
ministe : nous aurions deux messages différents qui, avec la même clé, donnent le même
cryptogramme c !
Il y a donc au moins autant de clés que de messages m possibles. ¥
Théorème 13.2 Dans un système de cryptage parfait, l’incertitude sur les clés
H(K) est au moins aussi grande que l’incertitude sur les messages H(M ) :
H(K) ≥ H(M ).
1
Ce type d’attaque est appelé attaque sur le texte chiffré seulement.
13.2. CONFIDENTIALITÉ PARFAITE 225
La conséquence de ces deux théorèmes est que dans un système parfait, les clés doivent être
suffisamment complexes, au moins plus complexes que les messages eux-mêmes.
Par ailleurs :
n
X n
X X
H(C) = H(Ci |C1 ...Ci−1 ) = P (c1 ...ci−1 )H(Ci |c1 ...ci−1 )
i=1 i=1 c1 ...ci−1
or
X
P (Ci = c|c1 ...ci−1 ) = P (Ki = c − m)P (Mi = m|c1 ...ci−1 )
m∈ΣM
1 X
= P (Mi = m|c1 ...ci−1 )
|ΣK |
m∈ΣM
1
=
|ΣK |
2
L’addition binaire (aussi appelée « ou exclusif » pour le lecteur familier avec l’informatique) est l’addition
modulo 2 habituelle, sans retenue : 1 + 1 = 0 et, comme d’habitude, 0 + 0 = 0, 1 + 0 = 0 + 1 = 1.
226 CHAPITRE 13. CRYPTOGRAPHIE
donc
H(Ci |c1 ...ci−1 ) = H(Ki )
P
et donc H(C) = i H(Ki ) = H(K). Ainsi H(C|M ) = H(C). ¥
Nous avons vu que pour qu’un système de cryptage soit parfait, la clé doit être suffisamment
complexe. En pratique, du moins dans le cas d’une utilisation à large échelle, ceci n’est pas
très commode.
Pour un système pratique à large échelle (p.ex. la sécurité sur Internet) la clé doit être petite
(du moins plus petite que les messages) et pouvoir être utilisée plusieurs fois, c.-à-d. que le
système doit être « imparfait » d’un point de vue formel.
Que pouvons-nous donc dire à propos des systèmes « imparfaits » (mais plus pratiques) ?
Pour déterminer quand un système de chiffrement qui n’offre pas de confidentialité parfaite
pourrait en principe être cassé, Shannon introduit ce qu’on appelle la fonction d’équivocation
de la clé, définie pour des entiers par
Il semble évident que plus du texte crypté a été vu, moins il reste d’incertitude sur la clé. De
manière plus formelle :
lim a(n) = 0
n→∞
La distance d’unicité u est alors définie comme le n le plus petit tel que a(n) ≈ 0.
Ainsi, u est la plus petite quantité de texte chiffré à partir de laquelle des personnes non-
autorisées sont capables de déterminer la clé secrète de manière quasiment unique. En gros, la
distance d’unicité est la plus petite quantité de texte chiffré à partir de laquelle le système de
chiffrement peut être cassé.
Calculons maintenant la distance d’unicité dans certaines circonstances.
13.2. CONFIDENTIALITÉ PARFAITE 227
Théorème 13.4 Si
– M et C sont de même longueur n et du même alphabet Σ ;
– les messages cryptés ont en gros une incertitude maximale : H(C1 ...Cn ) ≃
n · log |Σ| (ce qui est ce que tout cryptographe cherche à atteindre) ;
– la clé et les messages sont indépendants : H(Mn , K) = H(Mn ) + H(K) (ce qui
est aussi très naturel et habituellement le cas).
Alors la distance d’unicité peut être approximée par
H(K)
u≃ (13.1)
R(M ) · log |Σ|
où R(M ) est la redondance du message non crypté M , comme définie dans la sec-
tion 3.2.1 du chapitre 3 :
h∞ (M )
R(M ) = 1 − .
log |Σ|
D ÉMONSTRATION Faisons l’hypothèse que n est assez grand pour que H(Mn1 ) ≃ n ·
h∞ (M ) ; ce qui est une hypothèse sensée (considérer sinon le maximum entre un tel n et
la valeur de u obtenue avec la formule donnée).
1)
H(KCn
z }| {
H(K|Cn1 ) = H(Mn1 KCn1 ) − H(Mn1 |KCn1 ) −H(Cn1 )
= H(Mn1 KCn1 ) − H(Cn1 )
= H(Mn1 K) − H(Cn1 )
= H(Mn1 ) + H(K) − H(Cn1 )
= n · h∞ (M ) + H(K) − n · log |Σ|
ou :
H(K)
u =
log |Σ| − h∞ (M )
H(K)
=
R(M ) · log |Σ|
Exemple 13.5 (distance d’unicité) Considérons des messages en anglais (faits de l’alphabet
de 27 lettres, incluant l’espace blanc) chiffrés avec un code utilisant une clé de 20 lettres
indépendantes. H(K) = 20 · log(27).
Sachant que le taux d’entropie de l’anglais est en gros de 2 bits par lettre, la redondance des
228 CHAPITRE 13. CRYPTOGRAPHIE
messages est R(M ) = 1 − 2/ log(27) ≃ 0.58 et la distance d’unicité d’un tel système est :
H(K)
u =
R log |Σ|
20 · log(27)
= ≃ 35
log(27) − 2
Shannon était bien conscient que la formule (13.1) était valide en général et « peut être utilisée
pour estimer les caractéristiques d’équivocation et la distance d’unicité des types de chiffres
ordinaires ». En fait, les cryptographes utilisent cette formule pour estimer la distance d’unicité
de presque tous les chiffres.
Notez aussi que u est, en principe, la quantité de texte chiffré pour déterminer la clé de manière
presque unique. Toutefois, trouver K à partir de C1 , C2 , . . . , Cu peut très bien être un problème
impossible à traiter en pratique. Cette formule dit seulement que toute l’information est là,
mais ne dit pas un mot sur la difficulté à « extraire » cette information. Nous reviendrons sur
cet aspect plus tard, dans la section 13.3.
On peut voir de (13.1) qu’un bon moyen d’augmenter la distance d’unicité (c.-à-d. de moins
en dire à propos du système) est de diminuer la redondance des messages, c.-à-d. d’augmenter
leur entropie.
Une bonne idée est par exemple de compresser les messages avant cryptage. En effet, dans les
meilleurs cas de compression, H(Mn1 ) ≃ n log |Σ| et donc R(M ) ≃ 0, alors u → ∞.
Une autre possibilité est d’utiliser un vieux truc de cryptographique appelé « substitution ho-
mophonique ». Dans ce procédé, plusieurs « homophones » différents sont utilisés pour re-
présenter chaque symbole de l’alphabet originel ; plus d’homophones pour les symboles les
plus fréquents, de manière à ce que les homophones aient une probabilité d’apparition presque
égale (ce qui n’est pas le cas des symboles originels).
Exemple 13.6 En anglais, le symbole le plus probable est l’espace blanc, avec une proba-
bilité d’environ .1859, le symbole le plus probable suivant est ‘E’, qui a une probabilité
d’environ .1031. Le moins probable est ‘Z’ avec une probabilité d’environ .0005.
Si nous voulons convertir un tel texte en anglais en utilisant des symboles à probabilité
d’apparition égale, nous avons besoin d’au moins 1/0.005 = 2000 symboles (pour pou-
voir en avoir au moins un pour le ‘Z’). Supposons ainsi utiliser 2000 « homophones »
pour représenter les 27 lettres. L’espace blanc sera représenté par n’importe lequel des 372
(≈ .1859 × 2000) symboles choisis pour le représenter, ‘E’ par n’importe lequel des 206
(≈ .1031 × 2000) autres symboles qui lui sont réservés, etc., et 1 (≈ .0005 × 2000) sym-
bole homophone sera utilisé pour représenter le ‘Z’. Le choix d’un substitut pour une lettre
de l’anglais est alors fait par choix aléatoire uniforme à partir de l’ensemble de substituts
homophones pour cette lettre. Les choix successifs sont effectués de manière indépendante.
Après une telle conversion, chaque symbole homophone du texte converti a par essence une
probabilité d’apparition égale à n’importe quel autre.
13.3. CONFIDENTIALITÉ EN PRATIQUE : SÉCURITÉ ALGORITHMIQUE 229
Le décodage peut être facilement effectué en remplaçant chacun des substituts par la lettre
correspondante. Il n’y a pas besoin de savoir à l’avance quels substituts ont été choisis au
hasard au cours du procédé de pré-codage.
Évaluation 65
Quelle est la distance d’unicité d’un système de cryptage chiffrant des messages de 96 carac-
tères ayant un taux d’entropie de 3 bits par caractère avec des clés dont l’entropie est de 33
bits ?
Évaluation 66
Quelle est la distance d’unicité d’un système de cryptage qui code des messages binaires qui
ont une redondance de 25% avec des clés distribuées uniformément de 16 symboles binaires ?
H(K)
u≃
R(M ) · log |Σ|
Jusqu’ici, aucune attention particulière n’a été portée à la puissance de calcul effectivement re-
quise pour craquer le système. L’analyse de la confidentialité développée jusqu’ici s’applique
indépendamment du temps et de la puissance de calcul disponibles pour les attaques. La sécu-
rité contre des ennemis à puissance de calcul non restreinte est appelée sécurité incondition-
nelle (ou sécurité « théorique », comme Shannon avait pour habitude de l’appeler). Comme
nous l’avons vu dans les théorèmes 13.1 et 13.2, l’obtention d’une sécurité inconditionnelle
requiert d’énormes quantités de clés secrètes complexes, bien plus grandes que ce qui serait
acceptable en pratique pour des applications à large portée de la cryptographie. La plupart des
systèmes de cryptage utilisés en pratique ne comptent donc pas sur l’impossibilité d’être cas-
sés, mais plutôt sur la difficulté d’un tel cassage. Dans ce cadre, le but recherché est d’assurer
la sécurité à l’encontre de personnes qui disposent pour leurs attaques d’un temps et d’une
puissance de calcul limités. Ceci est appelé sécurité algorithmique (ou « sécurité pratique »,
comme Shannon avait pour habitude de l’appeler). Le point essentiel est de changer le manque
d’information (sécurité inconditionnelle) en difficulté à accéder à l’information.
Mais que signifie effectivement être difficile ? Comment mesurer la difficulté de craquer un
code ? Voici à quoi vise la « complexité algorithmique ».
Le but de cette section n’est pas de fournir un cours complet sur la complexité algorithmique,
mais de présenter les concepts de base de manière à ce que le reste de la matière concernant la
sécurité algorithmique puisse être suffisamment bien compris.
La complexité algorithmique vise à définir la complexité des problèmes de décision. Un pro-
blème de décision est simplement une question oui/non sur une entrée bien définie. Par exemple,
un nombre entier n donné (l’« entrée »), ce nombre est-il un nombre premier ?
Si la réponse au problème de décision pourrait être trouvée par quelque algorithme (sur une
machine de Turing), le problème de décision est dit « algorithmique ».3
Pour les problèmes de décision algorithmiques, la complexité(-temps)4 est définie comme le
plus petit nombre de pas de temps (sur une machine de Turing) des algorithmes qui peuvent
répondre à la question.5
Pour de bonnes raisons fondamentales, cette complexité n’est pas exprimée exactement, mais
uniquement de la façon dont elle dépend de la taille de l’entrée : un problème est dit linéaire,
quadratique, exponentiel, ... ce qui signifie que sa complexité croît linéairement, avec le carré,
exponentiellement, ... avec la taille de l’entrée.
La complexité est donc exprimée en termes de notation « grand O ».
Définition 13.3 (Notation grand O) Pour deux fonctions f et g sur les nombres
réels, g est dite O(f ) si et seulement si
Notez que si g est O(f ) et f est O(h), alors g est aussi O(h). Pour la mesure de la complexité,
3
Dans la théorie de la complexité algorithmique générale, les problèmes de décision algorithmiques sont appelés
« problèmes décidables selon Turing », mais ceci va un peu au-delà du propos de ce chapitre.
4
seule la complexité temporelle est considérée dans ce chapitre.
5
Nous n’entrons pas ici dans les détails des problèmes et co-problèmes.
13.3. CONFIDENTIALITÉ EN PRATIQUE : SÉCURITÉ ALGORITHMIQUE 231
nous cherchons le « plus petit et plus simple » f tel que g soit O(f ) (p.ex. tel que f soit aussi
O(|g|)).
Exemple 13.7 (Notation grand O) 3 · n + log n + 4 est O(n). Notez qu’elle est aussi O(n +
n3 ), O(n log n), O(n2 ), ... qui ne sont pas pertinents pour la mesure de la complexité.
5 · x2 − 12 · x7 + 5 · x3 est O(x7 ).
1/x est O(1).
La complexité d’un problème linéaire est O(n), où n est la taille de l’entrée.
Un problème dont la complexité est O(2n ) est un problème exponentiel.
Un piège classique est de penser que NP signifie ‘not-P’ ou ‘non-P’. Ceci est faux pour plu-
sieurs raisons :
– P et NP ne sont pas complémentaires : P est en fait totalement inclus dans NP ;
– il existe des problèmes qui ne sont ni P ni NP.
Que signifie alors le ’N’ de NP ? Il veut dire « Non-déterministe ». Les problèmes NP sont
des problèmes qui sont polynômiaux d’une manière non-déterministe : choisissez une solution
possible au hasard, vous pouvez conclure (pour cette solution candidate seulement !) en un
temps polynômial.
Manifestement P ⊂ NP, mais la question de savoir si NP ⊂ P ou non reste pour l’instant
ouverte.
Respectivement à cette question, il y a un sous-ensemble de NP qui est d’intérêt particulier :
les problèmes « NP-Complets » (ou « NP-C »).
Cette catégorie est d’une importance particulière car si quelqu’un réussit à prouver qu’un seul
NP-C est effectivement dans P, alors tout NP est inclus dans P !
Il y a finalement une dernière catégorie de problèmes (les « difficiles ») : les problèmes NP-
difficiles.
Définition 13.6 Un problèmea est dit NP-difficile si il est au moins aussi difficile que
tout problème de NP. ¨
a
Dans sa définition la plus générale, la catégorie NP-difficile inclut aussi les problèmes qui ne sont
pas que des problèmes de décision.
232 CHAPITRE 13. CRYPTOGRAPHIE
Les problèmes NP-C et NP-difficiles sont souvent confondus. La différence entre les problèmes
NP-C et NP-difficiles est qu’un problème NP-difficile n’a pas besoin d’être dans NP (que ce
soit parce que vous ne vous en préoccupiez pas ou ne vouliez pas passer de temps à le prouver
ou, plus fondamentalement, parce que c’est un problème si difficile que même le tester sur une
seule solution ne peut être accompli en un temps polynômial).
(xi1 ∨ xj1 ∨ xk1 ) ∧ (xi2 ∨ xj2 ∨ xk2 ) ∧ (xi3 ∨ xj3 ∨ xk3 ) ∧ ....
Nous avons maintenant tous les ingrédients requis pour élaborer un code difficile à craquer :
inspirons-nous des problèmes NP-difficiles. Concentrons-nous maintenant plus précisément
sur l’utilisation de problèmes difficiles en cryptographie : les fonctions à sens unique et, plus
tard, les fonctions à trappe.
Définition 13.7 (Fonction à Sens Unique) Une fonction à sens unique∗ est une
fonction qui est facile à calculer mais difficile à inverser (par calcul). ¨
13.3.3 DES
Le standard de cryptage de données (abrégé DES, pour Data Encryption Standard) est un
exemple de système de cryptographie algorithmique qui utilise des fonctions à sens unique.
Nous présentons ici l’idée de base du DES en nous concentrant seulement sur le noyau du
système, le standard contenant lui-même plusieurs autres astuces pratiques.
Le DES utilise un problème NP-Complet très similaire au SAT pour ceci : des systèmes d’équa-
tions dans GF(2).
x1 x4 + x2 x3 x5 = 1
x2 x3 + x1 x3 x4 = 1
x1 x3 + x1 x2 x5 = 1
Choisir aussi une clé K de (d − 1)m bits, et la partager en (d − 1) parts de m bits chacune :
K = (K1 , ..., , Kd−1 ).
m
13.4. CRYPTOGRAPHIE À CLÉ PUBLIQUE 237
Lesquels des nombres suivants sont des racines primitives dans GF∗ (11): 2, 4, 5, 6, 9, 10 ?
Évaluation 68
Tout d’abord, l’exponentielle discrète est toujours aisément calculable, nécessitant au plus
2 log2 n multiplications dans GF∗ (p) utilisant l’algorithme « mettre au carré et multiplier ».
Par ailleurs, l’algorithme le plus rapide connu à ce jour (2003) pour trouver des logarithmes
discrets est en O(exp((log n)1/3 (log log n)2/3 )).
Toutefois, il n’y a aucune preuve qu’il n’existe aucun algorithme pour calculer le logarithme
discret général en un temps plus court.
Diffie, Hellman et Pohlig ont émis l’hypothèse que l’exponentielle discrète dans GF∗ (p) (quand
la base est une racine primitive) est une fonction à sens unique, à condition que p soit un
nombre élevé tel que p − 1 ait aussi un facteur premier élevé.
Aucune preuve de cette hypothèse n’a été faire à ce jour (2003). Mais aucun algorithme n’a
non plus été trouvé qui permette la calcul efficace du logarithme discret. En d’autres termes,
les preuves historiques en faveur de l’hypothèse s’accumulent, mais aucune preuve théorique
n’a encore vu le jour.
Dans leur article de 1976, Diffie et Hellman ont suggéré une méthode ingénieuse pour créer
une clé secrète commune entre émetteur et destinataire dans un réseau sans recourir à un canal
sécurisé pour l’échange des clés secrètes ; leur méthode repose sur le fait que l’exponentiation
discrète est à sens unique. Supposons que f (x) = ax soit vraiment une fonction à sens unique
et soit connue de tous les utilisateurs du réseau.
Chaque personne (l’utilisateur A) choisit au hasard (et en secret !) une clé privée (ou secrète)
xA et calcule alors sa clé publique yA = axA , qui est publiée publiquement.
Lorsqu’une autre personne (l’utilisateur B) désire communiquer de manière sécurisée avec A,
chacun va chercher la clé publique de l’autre et utilise cette clé à la puissance de sa propre clé
privée pour la communication ; c.-à-d. que l’utilisateur A calcule yB xA et l’utilisateur B yA xB .
Ce qui est « magique » est que ces deux nombres sont en fait le même : yB xA = (axB )xA =
axA xB = (axA )xB = yA xB . Ce nombre kAB = axA xB , que les deux utilisateurs A et B peuvent
238 CHAPITRE 13. CRYPTOGRAPHIE
calculer, est leur « secret commun », qu’ils peuvent utiliser en toute tranquillité comme leur
clé secrète pour communiquer en utilisant un système de cryptage à clé secrète conventionnel.
Ce que fournit la méthode de Diffie-Hellman est donc une manière publique de distribuer des
clés secrètes.
Si quelque personne non autorisée désire craquer la clé, il devrait être capable de prendre des
logarithmes discrets de yA ou de yB (p.ex. xA = Loga yA ) et d’obtenir ensuite la clé secrète
par KAB = yB xA . Mais si l’exponentiation discrète utilisée est réellement à sens unique, cette
attaque est calculatoirement irréalisable.
A ce jour (2003), personne n’a produit d’attaque sur le système de distribution des clés pu-
bliques de Diffie-Hellman qui ne soit algorithmiquement équivalente au calcul du logarithme
discret. Toutefois, il n’a pas non plus été prouvé que toute attaque sur ce système soit algorith-
miquement équivalente au calcul du logarithme discret.
Évaluation 69
Dans un système de clé publique de Diffie-Hellman, avec p = 19 et a = 3 (qui est en fait une
racine primitive dans GF∗ (19)),
– quelle est la clé publique correspondant à la clé privée 5 ?
– quelle clé une personne dont la clé privée est 7 utilise-t-elle pour communiquer avec une
personne dont la clé publique est 14 ?
Même question avec p = 101 et a = 51.
Les fonctions à trappe, le deuxième point crucial présenté par Diffie et Hellman pour leur
système de cryptographie à clé publique, est plus subtil et plus difficile que le premier, les
fonctions à sens unique.
Définition 13.9 Une fonction trappe∗ est en fait une famille de fonctions bijectives
ft , indexée par un paramètre t (la clé de la « trappe »), telle que chaque fonction est
à sens unique mais telle que, lorsque t est connu, ft −1 est facile à calculer. ¨
L’utilité en cryptographie d’une fonction trappe est la suivante : chaque utilisateur choisit au
hasard (et en secret) une clé, disons t, et publie ft (mais pas t elle-même !). Habituellement ft
est prise dans une famille de fonctions de manière à ce que seuls quelques paramètres doivent
être publiés. Ces paramètres sont appelés « clé publique ».
Si quelqu’un veut communiquer un message M aux personnes dont la fonction à trappe publiée
est ft , il envoie simplement ft (M ), qui est facile à calculer comme ft est à sens unique. Pour
13.4. CRYPTOGRAPHIE À CLÉ PUBLIQUE 239
obtenir le message correct, le destinataire calcule ft −1 qu’il lui est facile de calculer comme
il connaît la clé t. Ce calcul est toutefois difficile pour toute personne qui ne dispose pas de la
clé.
Un exemple de fonction à trappe est donné dans la section suivante.
13.4.4 RSA
Les premières fonctions à trappe furent élaborées en 1978 par R. L. Rivest, A. Shamir et L.
Adleman (abrégés RSA). La fonction à trappe de RSA est basée sur la difficulté supposée de
factoriser des entiers.
Dans ce cadre, le message et le cryptogramme sont représentés par des (énormes !) entiers.
Chaque utilisateur choisit deux nombres premiers (élevés) p et q (tels que p − 1 et q − 1 aient
aussi des facteurs premiers élevés) de manière à ce que pour tout message M possible, M < pq
(sinon partager M en plusieurs parties de façon à ce que chaque partie soit inférieure à pq et
considérer chaque partie comme M par la suite).
Soit n = pq et m = (p−1)(q−1). L’utilisateur choisit alors d < m qui est premier relativement
à m (c.-à-d. que d et m n’ont aucun diviseur commun) et calcule e tel que ed = 1 mod m. Un
algorithme calculant e à partir de d et de m est donné dans l’appendice à la fin de ce chapitre.
La clé publique (à publier) est alors (e, n) et la clé privée (à garder secrète) est (d, p, q, m).
La fonction de cryptage (qui est publique) est
C = Me mod n
D = Cd mod n
La preuve est vraiment simple, de même que le corollaire suivant qui nous intéresse :
Exemple 13.15 (RSA) Supposons vouloir utiliser un système RSA pour communiquer, et
que nous choisissions p = 47 et q = 59 (Ceci n’est pas vraiment un système sûr, mais
uniquement fait dans le but d’illustrer ! En pratique, p et q devraient contenir plus de 150
chiffres.)
Nous calculons alors n = pq = 2773 et m = (p − 1)(q − 1) = 2668 et choisissons un d qui
soit premier avec m ; p.ex. d = 157.
Finalement, nous calculons e tel que 157 · e = 1 mod 2668 en utilisant l’algorithme d’Eu-
clide étendu pour le plus grand diviseur commun : e = 17.
e et n sont publiés : (17, 2773), mais les autres nombres sont gardés secrets.
Supposons maintenant que quelqu’un veuille nous envoyer le message ITS ALL GREEK
TO ME. Par une convention préétablie (et qui est publique : hypothèse de Kerckhoff), cette
personne le transforme en nombres :
09 20 19 00 01 12 12 00 07 18 05 05 11 00 ...
Comme M doit être inférieur à n, c.-à-d. M < 2773, elle le découpe la chaîne ci-dessus en
entiers d’au plus 4 chiffres (effectivement, le code maximum sera alors 2626, ce qui corres-
pond à ZZ) :
920, 1900, 112, 1200, 718, 505, 1100, ...
Elle calcule alors 92017 mod 2773, 190017 mod 2773, 11217 mod 2773, ... et nous en-
voie les entiers correspondants ; c.-à-d.
948, 2342, 1084, 1444, 2663, 2390, 778, ...
Ce message est déchiffré en utilisant notre clé privée :
et le décodage finit en appliquant la convention dans l’autre sens : 920, 1900, ... =
09, 20, 19, 00, ... = ITS ...
On peut maintenant se demander comment notre correspondant a calculé 190017 mod 2773,
ou comment nous avons calculé 2342157 mod 2773...
Ceci a été effectué par la méthode de « mettre au carré et multiplier » et en gardant à l’esprit
que
a · b = α · β mod n
pour tout a = α mod n et b = β mod n
Par exemple
comme
23422 = 4312 = 2743 mod 2773
23424 = 27432 = 302 = 900 mod 2773
23428 = 9002 = 284 mod 2773
234216 = 2842 = 239 mod 2773
13.4. CRYPTOGRAPHIE À CLÉ PUBLIQUE 241
et
2342128 = 1428 mod 2773
Évaluation 70
Considérez un système RSA très simple où deux personnes ont les paramètres suivants :
p q d e
A 3 19 5 29
B 5 11 7 23
Sécurité du RSA
R ÉSUMÉ DU CHAPITRE 13
racine primitive : un nombre n inférieur à un nombre premier p est dit racine primitive dans
GF∗ (p) si et seulement si la seule puissance 1 < i < p telle que ni = 1 est p − 1.
logarithme discret : un entier n est le logarithme discret en base a d’un autre entier m de
GF∗ (p) si an = m mod p (où p est un nombre premier et a une racine primitive dans
mGF ).
système de distribution de clés publiques de Diffie-Hellman : étant donnés un nombre
premier p et une racine primitive a dans GF∗ (p), chaque utilisateur choisit une clé
8
voir http://www.rsasecurity.com/rsalabs/challenges/factoring/rsa155.html
pour plus de détails.
242 CHAPITRE 13. CRYPTOGRAPHIE
kAB = yB xA = yA xB
fonctions à trappe : une famille de fonctions à sens unique dépendant d’un paramètre, telles
que lorsque ce paramètre est connu, la fonction inverse n’est plus difficile à calculer.
RSA : Chaque utilisateur choisit deux nombres premiers p et q et un nombre d < (p−1)(q −
1) qui n’a pas de diviseur commun avec (p−1)(q −1). La clé publique est alors (e, pq)
où e est tel que ed = 1 mod (p − 1)(q − 1), et la clé privée est (d, p, q).
Un message M (qui est un entier inférieur à pq) est crypté en utilisant les clés publiques
par C = M e mod pq. Le décryptage est effectué en utilisant les clés privées : D =
C d mod pq.
13.5 Authentification
O BJECTIFS PÉDAGOGIQUES DE LA SECTION 13.5
Après avoir étudié cette section, vous devriez savoir :
1. pourquoi l’authentification et la sécurité sont théoriquement incompatibles ;
2. comment assurer l’authentification en pratique ;
3. en quoi consistent les structures d’identification de Diffie-Hellman et de RSA.
Dans cette dernière section, nous voulons maintenant nous tourner vers le second aspect de
la cryptographie : l’authentification, c.-à-d. les moyens de s’assurer que le message a bien
été envoyé par une personne autorisée. En d’autres termes, nous nous demandons ici si le
cryptogramme C reçu est valide (légal) ou s’il a été falsifié par une personne non autorisée.
Cette limite est serrée et peut être atteinte dans des cas spéciaux.
13.5. AUTHENTIFICATION 243
c.-à-d. · ¸
P (C)P (K)
log(PI ) = log E
P (C, K)
Ainsi
PI ≥ 2−I(C;K)
avec inégalité si et seulement si PP(C)P (K)
(C,K) est constant pour tout (C, K) (tels que P (C, K) >
0), p.ex. si C et K sont indépendants. ¥
Ainsi, pour garantir l’authenticité, c.-à-d. pour avoir une probabilité d’infraction faible, l’infor-
mation mutuelle entre les cryptogrammes et les clés doit être grande ! Toutefois, pour assurer
une confidentialité parfaite, nous avons vu dans les sections précédentes que I(C; M ) = 0 est
nécessaire !
Donc, du point de vue strict du contenu de l’information, l’authentification et la confidentialité
semblent être, d’une façon ou d’une autre, incompatibles. En effet,
donc I(C; M ) = 0 (et avec l’hypothèse sensée que H(K|M, C) = 0) implique que I(C; K) =
244 CHAPITRE 13. CRYPTOGRAPHIE
Notez qu’il s’agit là d’une signature énorme comme ki et κi ne sont pas des bits mais des clés,
c.-à-d. des séquences de k bits, où k est la taille de clé requise par l’algorithme d’encryption.
Lorsque le destinataire reçoit le message et sa signature, il peut vérifier que le message a bien
été envoyé par la bonne personne en faisant :
– si mi = 0, e(si , σi ) = λi
– si mi = 1, e(ti , σi ) = µi
Un tel procédé d’identification présente toutefois plusieurs inconvénients :
– beaucoup de matériel doit être communiqué d’avance ;
– un message de n bits nécessite une signature de k · n bits !
– les clés secrètes ne le sont plus très longtemps !
Diffie et Hellman ont aussi montré en 1976 que, tant que le domaine et la portée de la fonction
à trappe ft coïncident pour tout t, ft peut aussi être utilisée pour assurer l’authenticité de
messages avec signature numérique. Étant donné que des messages légitimes ont une structure
interne suffisante pour pouvoir être correctement distingués de séquences aléatoires (ce qui est
à nouveau à l’opposé de ce qui est nécessaire pour assurer la sécurité !), si l’utilisateur A désire
signer un message M de manière à assurer qu’il en est l’émetteur, il applique à M l’algorithme
de décryptage avec sa clé privée pour calculer le message signé M ′ = d(M, k̃A ). Tout autre
utilisateur, soit B, qui obtient M ′ peut utiliser l’algorithme de cryptage avec la clé publique de
A kA pour calculer e(M ′ , kA ) = M . Toutefois, seul l’utilisateur A sait comment transformer
13.5. AUTHENTIFICATION 245
Évaluation 71
Considérons à nouveau le système RSA très simple où deux personnes ont les paramètres
suivants :
p q d e
A 3 19 5 29
B 5 11 7 23
Sécurité de la signature
Pour ce faire, choisissons pour tout secret un polynôme d’ordre k−1 dont le plus bas coefficient
est S :
P (X) = S + a1 X + a2 X 2 + ... + ak−1 X k−1
Les autres coefficients ai sont choisis au hasard, et diffèrent d’un secret à l’autre.
L’utilisateur autorisé i a reçu la partie du secret sous la forme de la valeur du polynôme pour
la valeur i :
pi = p(i),
Ceci remplit les conditions ci-dessus : k utilisateurs peuvent recomposer le polynôme par in-
terpolation, mais pas k − 1 utilisateurs (ou moins).
Exemple 13.17 Le secret S = 0105, partagé par n = 5 personnes parmi lesquelles toute
paire peut accéder au secret (k = 2)
Ainsi
p1 = 155, p2 = 205, p3 = 255, p4 = 305, p5 = 355
p(2) = S + a1 · 2 = 205
p(5) = S + a1 · 5 = 355
13.5. AUTHENTIFICATION 247
Le partage de secret peut être utile à la création de « structures d’accès » au secret : il y a moins
de n utilisateurs, et certains d’entre eux reçoivent plus de morceaux que d’autres.
Par exemple, imaginons que l’ouverture d’un coffre nécessite 1 directeur, ou 2 fondés de pou-
voir, ou 1 fondé de pouvoir et 2 caissiers, ou 5 caissiers.
Par exemple, avec k = 10
– le directeur de la banque reçoit 10 parts,
– chaque fondé de pouvoir reçoit 6 parts,
– et chaque caissier 2 parts seulement.
Ainsi
– le directeur seul a les 10 parts requises pour ouvrir le coffre,
– 2 fondés de pouvoir ont 12 parts,
– 1 représentant et 2 caissiers 10 parts,
– et 5 caissiers : 10 parts.
Le seul problème d’une telle solution est que, pour des situations complexes, le nombre de
parts peut être élevé.
• L’authentification (qui assure que le message a bien été envoyé par une personne autorisée)
et la confidentialité (qui assure que le message est reçu par des personnes autorisées)
sont d’une certaine façon théoriquement incompatibles, comme la première nécessite
I(C; K) la plus grande possible et la dernière I(C; M ) aussi petite que possible.
• PI ≥ 2−I(C;K)
système d’authentification de Diffie-Lamport : peut être utilisé pour signer des messages
binaires. Choisir 2n clés et 2n séquences, publier le cryptage de la seconde par la
première et signer en envoyant l’une ou l’autre clé, dépendamment des bits du message.
système d’authentification RSA : La signature est le message élevé à la puissance de la clé
privée. L’envoyer cryptée avec la clé publique du destinataire.
secrets partagés : L’accès à un secret commun est diffusé parmi plusieurs « porteurs de clé »
par l’utilisation d’un polynôme.
R ÉSUMÉ DU CHAPITRE 13
La cryptographie vise à transmettre des messages de manière sécurisée (seules les per-
sonnes autorisées peuvent le lire) ou à authentifier des messages (aucune personne
non-autorisée n’aurait pu l’envoyer).
Pour ce faire, les messages en clair M sont codés en utilisant une clé K et une fonction
déterministe : C = e(M, K).
Les messages cryptés peuvent être décodés de manière déterministe en utilisant la fonction
de décodage d et la même clé K, de façon à ce que d(e(M, K), K) = M .
248 CHAPITRE 13. CRYPTOGRAPHIE
H(K)
u≃
R(M ) · log |Σ|
kAB = yB xA = yA xB
fonctions à trappe : une famille de fonctions à sens unique dépendant d’un paramètre, telles
que lorsque ce paramètre est connu, la fonction inverse n’est plus difficile à calculer.
RSA : Chaque utilisateur choisit deux nombres premiers p et q et un nombre d < (p−1)(q −
1) qui n’a pas de diviseur commun avec (p−1)(q −1). La clé publique est alors (e, pq)
où e est tel que ed = 1 mod (p − 1)(q − 1), et la clé privée est (d, p, q).
Un message M (qui est un entier inférieur à pq) est crypté en utilisant les clés publiques
par C = M e mod pq. Le décryptage est effectué en utilisant les clés privées : D =
C d mod pq.
• L’authentification (qui assure que le message a bien été envoyé par une personne autorisée)
et la confidentialité (qui assure que le message est reçu par des personnes autorisées)
sont d’une certaine façon théoriquement incompatibles, comme la première nécessite
I(C; K) la plus grande possible et le dernier I(C; M ) aussi petite que possible.
• PI ≥ 2−I(C;K)
système d’authentification de Diffie-Lamport : peut être utilisé pour signer des messages
binaires. Choisir 2n clés et 2n séquences, publier le cryptage de la seconde par la
première et signer en envoyant l’une ou l’autre clé, dépendamment des bits du message.
système d’authentification RSA : La signature est le message élevé à la puissance de la clé
13.5. AUTHENTIFICATION 249
Histoire et bibliographie
Les messages secrets ont été depuis longtemps un sujet d’étude passionnant. Cette passion
remonte au moins à l’Égypte antique (1900 avant J.-C.), ou à la Chine antique. En Europe,
bien que les Grecs et les Romains (p.ex. le « code de César ») aient déjà utilisé des messages
chiffrés, la cryptographie et la cryptanalyse n’ont réellement démarré que dans la seconde
moitié du treizième siècle et se sont développées plus sérieusement à partir du quinzième
siècle.
Autour de 1560, le diplomate français Blaise de Vigenère (1523-1596) développa son système
de cryptage à partir du travail de plusieurs de ses prédécesseurs : Alberti (1404-1472), Trithème
(1462-1516) et Porta (1535-1615). Le code de Vigenère est resté inviolable pendant 300 ans.
L’hypothèse selon laquelle la sécurité d’un code devrait reposer uniquement sur la confidentia-
lité de sa clé a été avancée pour la première fois en 1883 par Auguste Kerckhoffs (1835-1903) ;
l’histoire de la cryptographie a démontré sa sagesse. Un ennemi déterminé est généralement
capable d’obtenir les « plans » complèts des mécanismes de chiffrement et de déchiffrement
soit par des déductions intelligentes, soit en les dérobant, ou par toute autre mesure entre ces
deux extrêmes.
Le premier traitement réellement scientifique de la confidentialité n’a été fourni par C. Shannon
qu’en 1949 [10]. La théorie de la confidentialité de Shannon est en fait une application directe
de la théorie de l’information, qu’il avait formulée un an plus tôt. L’ingéniosité de sa publica-
tion de 1949 ne repose pas sur les méthodes utilisées, mais plutôt sur la nouvelle manière de
voir et la formulation intelligente de Shannon du problème de la confidentialité.
Bien que Shannon ait donné sa théorie de la condentialité en 1949, ce n’est qu’en 1984 que
Simmons donna une théorie analogue de l’authenticité, illustrant la difficulté et la subtilité plus
importantes de celle-ci.
Les fondations de la pensée cryptographique tremblèrent une fois de plus en 1976 lorsque deux
chercheurs de l’Université de Stanford, Whitfield Diffie et Martin E. Hellman, publièrent leur
article intitulé « New Directions in Cryptography ». Diffie et Hellman suggéraient qu’il est pos-
sible d’avoir des systèmes de cryptage algorithmique ne requérant pas de canal sécurisé pour
l’échange des clés secrètes. Ralph Merkle, alors étudiant diplômé de l’Université de Berkeley,
formula de manière indépendante les idées de base de cette « cryptographie à clé publique » et
soumit un article à ce sujet presque au même moment que Diffie et Hellman, mais son article
fut publié presque deux ans après le leur, et il perdit ainsi malheureusement le crédit dû à sa
découverte.
La contribution fondamentale de l’article de Diffie-Hellman consistait en les deux définitions
cruciales de fonction à sens unique (qu’ils empruntèrent au travail de R. M. Needham sur les
mots de passe des ordinateurs) et de fonction à trappe (qui était complètement nouvelle), de
même que des suggestions sur la façon d’utiliser de telles fonctions pour éliminer le besoin
d’échanger des clés secrètes dans des systèmes de cryptage algorithmiquement confidentiels.
Bien que Diffie et Hellman aient astucieusement défini les fonctions à trappe dans leur article
de 1976 et aient clairement montré le potentiel cryptographique de telles fonctions, la première
proposition d’une telle fonction ne fut faite que deux ans plus tard, en 1978, par les chercheurs
du M.I.T. R. L. Rivest, A. Shamir et L. Adleman (d’où RSA !).
250 CHAPITRE 13. CRYPTOGRAPHIE
Pendant ce temps, les bases du DES (1977) virent le jour à partir du système de cryptage d’IBM
Lucifer (publiées pour la première fois par Feistel en 1973 !). Toutefois, tandis que le système
de Lucifer utilisait une clé de 128 bits, le US National Bureau of Standard (connu maintenant
sous le nom de National Institute of Standards and Technology), qui publia le DES ne retint
que 56 bits pour la clé. Depuis la première proposition du DES, celui-ci a toujours été critiqué
à cause de la petite taille de sa clé.
En 1998, l’EFF (Electronic Frontier Foundation) a construit une machine, Deep Crack, pour
montrer au monde que le DES n’est pas (ou du moins n’est plus) un algorithme sûr. Deep
Crack, qui coûta $250’000 et était composé de 1536 puces spécialisées, était capable de récu-
pérer une clé de 56 bits, en utilisant une recherche exhaustive, en 4 jours en moyenne, vérifiant
92 milliards de clés à la seconde.9
Plus tard (le 18 janvier 1999), avec l’aide de distributed.net, une organisation spécialisée dans
la collecte et le contrôle du temps d’inactivité d’ordinateurs, ils cassèrent une clé DES en 22
heures et 15 minutes ! Plus de 100’000 ordinateurs (du plus lent PC aux puissantes machines
multiprocesseurs) ont reçu et effectué une petite part du travail ; ceci permit le traitement de
250 milliards de clés à la seconde. 10
En novembre 2002, l’AES (Advanced Encryption Standard), successeur du DES, fut publié.
L’AES utilise un autre type d’algorithme (l’algorithme de Rijndael, inventé par Joan Daemen
et Vincent Rijmen) et supporte des tailles de clé de 128 bits, 192 bits, et 256 bits, ce qui semble
suffisant de nos jours (2003).
9
Cette partie a été empruntée à http://lasecwww.epfl.ch/memo_des.shtml
10
pour plus de détails, voir http://www.rsasecurity.com/rsalabs/challenges/des3/index.html
13.5. AUTHENTIFICATION 251
u v r t
60
(0, 60) (1, 7) =8 (−8, 4)
7
7
(1, 7) (−8, 4) =1 (9, 3)
4
4
(−8, 4) (9, 3) =1 (−17, 1)
3
(9, 3) (−17, 1) (stop)
Exercices du module I3
Exercice 14.1.1:
a– Coder à l’aide de la permutation suivante (l’espace est notée ’_’)
_ A B C D E F G H I J K L M N O P Q R
S D F B P M _ R H I A J L X N Z O W Q
S T U V W X Y Z
T E V G C Y U K
la phrase « VOICI_UN_EXERCICE_PASSIONNANT »
b– Coder la même phrase avec le système de codage par transposition à 6 éléments suivants :
( 2 5 3 6 1 4 ).
c– Même question avec un code de Vigenère de clé CLEFS (avec la convention ’_’ = ’0’ et
’A’ = ’+1’).
d– Coder cette même phrase en utilisant successivement les trois codes précédents (dans
l’ordre des questions, c.-à-d. appliquer la transposition au résultat de la permutation et
appliquer le cryptage de Vigenère au résultat ainsi obtenu).
Exercice 14.1.2:
253
254 CHAPITRE 14. EXERCICES DU MODULE I3
Exercice 14.1.3:
Intérêt : Ceci prouve que I(X; Y |Z) > I(X; Y ) est possible.
Exercice 14.1.4:
WHAT_MAKESEYOAU_ADOR_DOAUNWIAIOSUOSROAUNEUAD_OIAS_
UAKOESAT_MAEFOAEAJ_ _DANERLOF
14.2. CONFIDENTIALITÉ PARFAITE 255
Exercice 14.2.1:
Si l’on suppose que l’entropie de l’anglais est comprise entre 1 et 2 bit par lettre, quelles bornes
trouve-t-on pour la distance d’unicité.
a– d’un système de cryptage par transposition de blocs de taille d ?
b– d’un système de cryptage de Vigenère de taille d ?
c– Si l’on suppose que l’entropie de l’anglais est de 1.5 bit par caractère, quelle taille (d)
doit on prendre pour chacun de ces cryptages afin de s’assurer une sécurité raisonnable
sur des textes de 100 caractères (c.-à-d. pour avoir une distance d’unicité supérieure à
100 ?).
On supposera que les messages n’utilisent que les 27 lettres majuscules (espace comprise) et
on fera l’approximation de processus stochastique sans mémoire pour les messages.
Exercice 14.3.1:
Note : on travaille ici en binaire, donc le ’+’ est un ou-exclusif et, entre autres, ’+1 = −1’,
’x2 = x’, ’2 x = x + x = x − x = 0’.
Exercice 14.3.2:
Exercice 14.4.1:
Exercice 14.4.2:
Un assistant envoie votre note au professeur concerné par mail encrypté en RSA. La clé pu-
blique du professeur est (7, 55) et le message envoyé (i.e. encrypté) est 25.
Quelle est votre note ?
Exercice 14.4.3:
PGP est un système de cryptographie hybride combinant un algorithme à clé publique (RSA) et
un algorithme à clé secrète (IDEA en l’occurence). En ce qui concerne l’utilisateur cependant,
PGP se comporte comme un cryptosystème à clé publique.
Son principe est le suivant : une clé secrète est générée puis est utilisée pour coder le message.
Cette clé secrète est elle-même codée en utilisant RSA. Le message envoyé est la concaténation
de la clé secrète codée et du message codé.
Supposons ici que le système à clé secrète utilisé soit un one-time pad décimal (i.e. pour
chaque chiffre une addition modulo 10 de la clé) agissant sur des blocs de 6 chiffres d’une
suite de chiffres. Un texte est lui-même transformé en suite de chiffres par la convention ’_’
=00, ’A’=01, ’B’=02, ...
Exemple : Texte=« UN TEST » → ’21140020051920’ et si la clé secrète est « 123456 », cela
donne comme message codé ’211400 200519 20’ + ’123456 123456 12’ = ’33485632396532’.
Sachant que votre clé publique RSA est (21, 172 831) et votre clé privée est 16 381, décoder
le message
58423
17237714237119365013215214405835485718277314346213327723
où par convention le cryptage RSA de la clé secrète est sur la première ligne.
14.5. AUTHENTIFICATION 257
14.5 Authentification
Exercice 14.5.1:
a1 = 33 a2 = 83 b1 = 27 b2 = 51
X1 = 1967 X2 = 1998 Y1 = 67 Y2 = 98
Exercice 14.5.2:
Pour assurer l’authenticité des messages contenant les notes, le professeur demande à l’assis-
tant de signer ses messages (toujours en utilisant le système RSA). Sachant que la clé publique
de l’assistant est à présent (3, 15) et celle du professeur (7, 77),
a– Quel message envoie l’assistant pour la note 4 ?
b– Quelle note correspond au message 41, 41 ?
c– Un message signé 27 a-t-il bien été envoyé par l’assistant ?
258 CHAPITRE 14. EXERCICES DU MODULE I3
Bibliographie
[2] R. Blahut. Theory and Practice of Error Control Codes. Addison-Wesley, 1983.
[3] P. Elias. Coding for noisy channels. In IRE Conv. Rec., volume 4, pages 37–47, 1955.
[4] A. Feinstein. A new basic theorem of information theory. IRE Trans. Information Theory,
IT-4:2–22, 1954.
[5] R. G. Gallager. A simple derivation of the coding theorem and some applications. IEEE
Trans. Information Theory, IT-11:3–18, 1965.
[7] S. Lin and D. J. Costello. Error Control Coding: Fundamentals and Applications.
Prentice-Hall, 1983.
[8] David Salomon. Data Compression – The complete reference. Springer, 1998.
[10] C. E. Shannon. Communication theory of secrecy systems. Bell Sys. Tech. Journal,
28:656–715, 1949.
[12] A. J. Viterbi. Error bounds for convolutional codes and an asymptotically optimum de-
coding algorithm. IEEE Transactions on Information Theory, 13:260–269, 1967.
259
260 BIBLIOGRAPHIE
Glossaire
261
262 BIBLIOGRAPHIE
capacité, 147
code
cyclique, 195
linéaire, 180
par bloc, 173
décodage
à distance minimale, 176
distance
Hamming, 173
distance minimale
d’un code, 177
décodage (à), 176
Hamming
distance, 173
poids, 173
source d’information, 90
syndrome, 188
263