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.
Soit un alphabet et un code uniquement décodable de sur un alphabet de taille , en notant les longueurs des mots de code , alors
Réciproquement, soient satisfaisant l’inégalité de Kraft, alors, il existe un code préfixe de taille sur un alphabet de taille avec ces longueurs de code.
En se restreignant aux codes préfixes, on trouve une démonstration simple du sens direct basée sur la bijection entre les arbres -aires et les codes préfixes
L’inégalité de Kraft devient alors :
Pour tout arbre -aire, avec l’ensemble de ses feuilles, et la profondeur de la feuille :
Démonstration
Par induction structurelle sur l’arbre : évident si est une feuille ou vide.
Si , tel que vérifie l'inégalité de Kraft pour tout , notons la profondeur de la feuille dans le sous-arbre de auquel elle appartient.
On a alors :
En appliquant l’hypothèse de récurrence, on a
Réciproquement, il suffit de montrer qu’à partir de satisfaisant l’inégalité de Kraft, on peut construire un arbre -aire avec feuilles vérifiant .
Démonstration
Sans perte de généralité, supposons
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 , on ne supprime que des nœuds de profondeur strictement supérieure à . Or, comme les profondeurs sont triées par ordre croissant, toutes les feuilles marquées sont de profondeur au plus .
À l'étape , il existe un nœud de profondeur qui n’a pas été marqué : il suffit de remarquer qu'à l'étape l’algorithme supprime ou marque nœud(s) de profondeur . Avant l'étape on a donc supprimé ou marqué , par inégalité de Kraft. Il existe donc un nœud de profondeur qui n'a été ni marqué, ni supprimé, prenons son ancêtre de profondeur , ce nœud n’a pas encore été marqué, ce qui conclut la preuve de l'algorithme.
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 la longueur du code d'un mot sur et , et considérons le nombre de mots de taille dont le code est de taille : . comme est uniquement décodable, on a .
On a alors
Mais un simple développement nous donne : , ce qui nous amène à .
Ceci étant vrai pour tout , comme , on retrouve l'inégalité voulue.
↑(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 )