Inégalité de Kraft

En théorie des codes, l'inégalité de Kraft donne, étant donné un ensemble de longueurs de mots de code, une condition nécessaire et suffisante pour l'existence d'un code préfixe et d'un code uniquement décodable. L'inégalité de Kraft est nommée d'après Leon Kraft. Elle est publiée par Kraft en 1949[1]. Toutefois, l'article de Kraft traite uniquement des codes de préfixe, et attribue l'analyse menant à l'inégalité à Raymond Redheffer.

Définition formelle

Soit un alphabet S = { s 0 , s 1 , s n 1 } {\displaystyle {\mathcal {S}}=\{s_{0},s_{1},\dots s_{n-1}\}} et C {\displaystyle {\mathcal {C}}} un code uniquement décodable de S {\displaystyle {\mathcal {S}}} sur un alphabet T {\displaystyle {\mathcal {T}}} de taille r {\displaystyle r} , en notant les longueurs des mots de code i = | C ( s i ) | {\displaystyle \ell _{i}=|{\mathcal {C}}(s_{i})|} , alors

i = 0 n 1 r i 1. {\displaystyle \sum _{i=0}^{n-1}r^{-\ell _{i}}\leqslant 1.}

Réciproquement, soient 0 , 1 , n 1 {\displaystyle \ell _{0},\ell _{1},\dots \ell _{n-1}} satisfaisant l’inégalité de Kraft, alors, il existe un code préfixe de taille n {\displaystyle n} sur un alphabet de taille r {\displaystyle r} avec ces longueurs de code.

Cas des codes préfixes

un arbre ternaire
un encodage préfixe de l'alphabet { a , b , c , d , e , f } {\displaystyle \{a,b,c,d,e,f\}} sur l'alphabet { 0 , 1 , 2 } {\displaystyle \{0,1,2\}} sous forme d'arbre, par exemple d {\displaystyle d} est codé 112

En se restreignant aux codes préfixes, on trouve une démonstration simple du sens direct basée sur la bijection entre les arbres r {\displaystyle r} -aires et les codes préfixes

L’inégalité de Kraft devient alors :

Pour tout A {\displaystyle {\mathcal {A}}} arbre r {\displaystyle r} -aire, avec L ( A ) {\displaystyle {\mathcal {L}}({\mathcal {A}})} l’ensemble de ses feuilles, et d ( ) {\displaystyle d(\ell )} la profondeur de la feuille {\displaystyle \ell } : L ( A ) r d ( ) 1 {\displaystyle \sum _{\ell \in {\mathcal {L}}({\mathcal {A}})}r^{-d(\ell )}\leqslant 1}

Démonstration

Par induction structurelle sur l’arbre : évident si A {\displaystyle {\mathcal {A}}} est une feuille ou vide.

Si A = N ( A 0 , A 1 , , A r 1 ) {\displaystyle {\mathcal {A}}={\mathcal {N}}({\mathcal {A}}_{0},{\mathcal {A}}_{1},\dots ,{\mathcal {A}}_{r-1})} , tel que A i {\displaystyle {\mathcal {A}}_{i}} vérifie l'inégalité de Kraft pour tout i {\displaystyle i} , notons d ( ) {\displaystyle d'(\ell )} la profondeur de la feuille {\displaystyle \ell } dans le sous-arbre de A {\displaystyle {\mathcal {A}}} auquel elle appartient. On a alors :

L ( A ) r d ( ) = i = 0 r 1 L ( A i ) r d ( ) = i = 0 r 1 L ( A i ) r d ( ) 1 = r 1 i = 0 r 1 L ( A i ) r d ( ) {\displaystyle \sum _{\ell \in {\mathcal {L}}({\mathcal {A}})}r^{-d(\ell )}=\sum _{i=0}^{r-1}\sum _{\ell \in {\mathcal {L}}({\mathcal {A}}_{i})}r^{-d(\ell )}=\sum _{i=0}^{r-1}\sum _{\ell \in {\mathcal {L}}({\mathcal {A}}_{i})}r^{-d'(\ell )-1}=r^{-1}\sum _{i=0}^{r-1}\sum _{\ell \in {\mathcal {L}}({\mathcal {A}}_{i})}r^{-d'(\ell )}}

En appliquant l’hypothèse de récurrence, on a L ( A ) r d ( ) r 1 i = 0 r 1 1 = 1 {\displaystyle \sum _{\ell \in {\mathcal {L}}({\mathcal {A}})}r^{-d(\ell )}\leqslant r^{-1}\sum _{i=0}^{r-1}1=1}

Réciproquement, il suffit de montrer qu’à partir de 0 , 1 , n 1 {\displaystyle \ell _{0},\ell _{1},\dots \ell _{n-1}} satisfaisant l’inégalité de Kraft, on peut construire un arbre r {\displaystyle r} -aire avec n {\displaystyle n} feuilles f 0 , f n 1 {\displaystyle f_{0},\dots f_{n-1}} vérifiant i ,   f i = i {\displaystyle \forall i,~f_{i}=\ell _{i}} .

Démonstration

Sans perte de généralité, supposons 0 1 n 1 {\displaystyle \ell _{0}\leqslant \ell _{1}\leqslant \dots \ell _{n-1}} On propose de construire cet arbre avec l’algorithme suivant :

programme arbre(n, r, [l_0, l_1, ... l_{n-1}])
    A <- Arbre r-aire complet de profondeur l_{n-1}
    pour i de 0 à n-1
        choisir un noeud n de A non-marqué de profondeur l_i
        en faire une feuille i.e. supprimer tous ses descendants
        le marquer
    retourner A

Pour justifier de la correction de l'algorithme, on a besoin de deux éléments :

  • On ne supprime jamais un nœud marqué par l’algorithme : lorsqu'on construit une feuille de profondeur i {\displaystyle \ell _{i}} , on ne supprime que des nœuds de profondeur strictement supérieure à i {\displaystyle \ell _{i}} . Or, comme les profondeurs sont triées par ordre croissant, toutes les feuilles marquées sont de profondeur au plus i {\displaystyle \ell _{i}} .
  • À l'étape i {\displaystyle i} , il existe un nœud de profondeur i {\displaystyle \ell _{i}} qui n’a pas été marqué : il suffit de remarquer qu'à l'étape j {\displaystyle j} l’algorithme supprime ou marque r n 1 j {\displaystyle r^{\ell _{n-1}-\ell _{j}}} nœud(s) de profondeur n 1 {\displaystyle \ell _{n-1}} . Avant l'étape i {\displaystyle i} on a donc supprimé ou marqué j = 0 i 1 r n 1 j r n 1 j = 0 n 1 r j r n 1 {\displaystyle \sum _{j=0}^{i-1}r^{\ell _{n-1}-\ell _{j}}\leqslant r^{\ell _{n-1}}\sum _{j=0}^{n-1}r^{-\ell _{j}}\leqslant r^{\ell _{n-1}}} , par inégalité de Kraft. Il existe donc un nœud de profondeur n 1 {\displaystyle \ell _{n-1}} qui n'a été ni marqué, ni supprimé, prenons son ancêtre de profondeur i {\displaystyle \ell _{i}} , ce nœud n’a pas encore été marqué, ce qui conclut la preuve de l'algorithme.

Cas général

Le cas général a un corollaire intéressant : puisque tout code uniquement décodable obéit à l'inégalité de Kraft, et qu'à partir de cette inégalité, on peut construire un code préfixe, pour tout code uniquement décodable, il existe un code préfixe dont les mots codés sont de même taille. Autrement dit, les codes uniquement décodables ne sont pas plus compacts que les codes préfixe.

Remarquons que la réciproque a déjà été traitée dans le cas des codes préfixes, tout code préfixe étant un code uniquement décodable.

Démonstration

Notons ( a ) {\displaystyle \ell (a)} la longueur du code d'un mot a {\displaystyle a} sur S {\displaystyle {\mathcal {S}}} et M = max { ( s ) , s S } {\displaystyle \ell _{M}=\max\{\ell (s),s\in {\mathcal {S}}\}} , et considérons N m , p {\displaystyle N_{m,p}} le nombre de mots de taille m {\displaystyle m} dont le code est de taille p {\displaystyle p}  : N m , p = | { a S m , ( a ) = p } | {\displaystyle N_{m,p}=|\{a\in {\mathcal {S}}^{m},\ell (a)=p\}|} . comme C {\displaystyle {\mathcal {C}}} est uniquement décodable, on a N m , p | T p | = r p {\displaystyle N_{m,p}\leqslant |{\mathcal {T}}^{p}|=r^{p}} .

On a alors

a S m r ( a ) = p = 1 m M a S m , ( a ) = p r ( a ) = p = 1 m M N m , p r p p = 1 m M r p r p = m M {\displaystyle \sum _{a\in {\mathcal {S}}^{m}}r^{-\ell (a)}=\sum _{p=1}^{m\ell _{M}}\sum _{a\in {\mathcal {S}}^{m},\ell (a)=p}r^{-\ell (a)}=\sum _{p=1}^{m\ell _{M}}N_{m,p}r^{-p}\leqslant \sum _{p=1}^{m\ell _{M}}r^{p}r^{-p}=m\ell _{M}}

Mais un simple développement nous donne : ( s S r ( s ) ) m = a S m r ( a ) {\displaystyle \left(\sum _{s\in {\mathcal {S}}}r^{-\ell (s)}\right)^{m}=\sum _{a\in {\mathcal {S}}^{m}}r^{-\ell (a)}} , ce qui nous amène à s S r ( s ) ( m M ) 1 / m {\displaystyle \sum _{s\in {\mathcal {S}}}r^{-\ell (s)}\leqslant (m\ell _{M})^{1/m}} . Ceci étant vrai pour tout m {\displaystyle m} , comme ( m M ) 1 / m 1 {\displaystyle (m\ell _{M})^{1/m}\longrightarrow 1} , on retrouve l'inégalité voulue.

Notes et références

  1. (en) Leon Gordon Kraft, « A device for quantizing, grouping, and coding amplitude-modulated pulses », Massachusetts Institute of Technology (Thèse),‎ (lire en ligne, consulté le )
  • icône décorative Portail de l’informatique