Objectifs du chapitre
À la fin de ce chapitre, vous serez capable de:
- distinguer compression sans perte et compression avec pertes, et dire dans quelles situations chacune est légitime;
- démontrer par comptage qu'aucun compresseur sans perte ne raccourcit tous les fichiers, et en tirer les bonnes conclusions pratiques;
- reconnaître un code préfixe, le lire sur un arbre binaire, et exhiber l'ambiguïté d'un code qui ne l'est pas;
- énoncer et démontrer l'inégalité de Kraft dans les deux sens, et construire un code préfixe à partir de longueurs admissibles;
- démontrer le théorème du codage de source, construire un code de Huffman complet et mesurer l'écart qui le sépare de l'entropie;
- expliquer le principe du codage arithmétique et celui de Lempel–Ziv, et décrire honnêtement ce que font JPEG et MP3.
Ce que comprimer veut dire
Le chapitre 6 a établi qu'une source d'information possède une mesure intrinsèque, son entropie , exprimée en bits par symbole, et que cette quantité est la même quel que soit l'alphabet dans lequel on écrit les symboles. Nous y avons calculé l'entropie du message ABRACADABRA, qui vaut bits par symbole. Ce chapitre répond à la question que le précédent laissait ouverte: cette borne est-elle atteignable, et par quel algorithme?
Comprimer, c'est remplacer une représentation d'une donnée par une autre, plus courte. Rien de plus — mais tout est dans le mot «remplacer», car il faut pouvoir revenir en arrière, et c'est le degré de fidélité de ce retour qui sépare les deux grandes familles.
La frontière n'est pas une nuance technique, c'est une frontière d'usage. Un exécutable, une archive comptable, un jeu de données de mesures, un fichier source: la moindre altération d'un bit les rend faux ou inutilisables, et seule la compression sans perte est acceptable. Une photographie destinée à être regardée, un enregistrement destiné à être écouté: le destinataire est un œil ou une oreille, et l'on peut jeter tout ce que cet œil ou cette oreille ne percevra pas. Le gain est alors d'un tout autre ordre de grandeur — mais il est définitif. Un fichier une fois dégradé ne redevient jamais net.
Aucun compresseur ne comprime tout
La promesse commerciale d'un logiciel «qui réduit tous vos fichiers de moitié» n'est pas seulement exagérée: elle est mathématiquement impossible, et la démonstration tient en quatre lignes de dénombrement. C'est le résultat le plus important du chapitre pour l'hygiène intellectuelle, car il fixe d'emblée ce qu'on a le droit d'espérer.
Démonstration. Il y a exactement suites de longueur . Le nombre de suites de longueur au plus est
Comme est injective, deux suites distinctes de longueur ont des images distinctes; le nombre de suites de longueur dont l'image est de longueur au plus est donc majoré par le nombre de valeurs disponibles, soit . La proportion cherchée est au plus .
Pour la majoration donne : strictement moins de suites de longueur sont raccourcies, donc au moins une ne l'est pas. C'est exactement le principe des tiroirs: on ne range pas objets distincts dans tiroirs sans en mettre deux ensemble.
Lisons la conclusion quantitative. Moins d'une suite sur peut être raccourcie de bits; moins d'une sur , soit environ une sur , peut l'être de bits. Une compression franche est donc, statistiquement, un événement rare — sur l'ensemble de toutes les suites de bits.
Et pourtant les compresseurs fonctionnent. La contradiction n'est qu'apparente: les fichiers que les gens possèdent ne sont pas des suites tirées au hasard. Un texte français, une image de paysage, une table de mesures, un programme: tous sont extraordinairement redondants, et ils occupent une partie minuscule de l'espace des suites possibles. Un compresseur est un pari sur cette structure. Il gagne sur les fichiers réels et, nécessairement, il perd sur d'autres — sur le bruit, sur les données déjà comprimées, sur les données chiffrées.
Un ingénieur affirme avoir écrit un compresseur sans perte qui raccourcit d'au moins un bit toute suite de bits. Que peut-on en conclure?
Codes à longueur variable
Le problème du décodage
La première idée pour comprimer un texte est d'abandonner la longueur fixe. Avec symboles, un code de longueur fixe dépense bits par symbole, quelle que soit la fréquence de chacun. Pour ABRACADABRA, et : le message coûte bits. Or le A apparaît cinq fois sur onze et le D une seule: il est absurde de les payer le même prix.
L'absence de séparateur est le cœur du problème. On pourrait imaginer réserver un motif pour marquer la fin d'un mot, mais ce motif coûterait des bits à chaque symbole, exactement ce qu'on cherche à économiser. Un code doit donc se décoder par sa seule structure.
Être non singulier ne suffit pas. Considérons le code , , , : les quatre mots sont bien distincts deux à deux. Pourtant la suite se lit de deux façons.
Codes préfixes et arbres binaires
Un code préfixe est déchiffrable, et pour une raison très concrète: on le décode de gauche à droite, un bit à la fois, en s'arrêtant dès que les bits accumulés forment un mot du code — puisqu'aucun mot n'en prolonge un autre, ce mot est nécessairement le bon. Le décodage ne revient jamais en arrière et ne regarde jamais au-delà du mot courant; c'est le sens de l'adjectif «instantané».
La bonne façon de voir un code préfixe est l'arbre binaire. Construisons l'arbre dont la racine est la suite vide, où descendre à gauche écrit un et descendre à droite un : chaque nœud de profondeur correspond alors exactement à une suite de bits. Un code est un choix de nœuds; il est préfixe si et seulement si aucun nœud choisi n'est ancêtre d'un autre, c'est-à-dire si les mots du code sont tous des feuilles de l'arbre qu'ils engendrent.
Parmi les quatre codes suivants sur un alphabet de quatre symboles, lequel est préfixe?
L'inégalité de Kraft
Quelles suites de longueurs peut-on espérer? Il y a manifestement une contrainte: on ne peut pas donner un mot court à tout le monde, car un mot court «occupe» une grande partie de l'arbre. L'inégalité de Kraft (1949) quantifie exactement ce budget, et c'est le théorème structurel du chapitre.
Démonstration.
Sens direct. Posons et plaçons-nous dans l'arbre binaire complet de profondeur , qui possède feuilles. Chaque mot , situé à la profondeur , est l'ancêtre d'exactement de ces feuilles: ce sont les suites de bits qui commencent par . Deux mots distincts et ne peuvent avoir de descendant commun à la profondeur , car une telle feuille commencerait à la fois par et par , ce qui forcerait l'un des deux à être préfixe de l'autre — interdit. Les ensembles de descendants sont donc deux à deux disjoints, et tous contenus dans l'ensemble des feuilles:
En divisant par , on obtient (7.3).
Réciproque. Quitte à renuméroter, supposons . Définissons les sommes partielles
L'hypothèse (7.3) donne , et même pour tout puisqu'il manque au moins le terme . Chaque est un rationnel dyadique de ; prenons pour mot les de son développement binaire (ce développement est fini et comporte au plus bits, car est un multiple entier de : tous les pour sont inférieurs ou égaux à ).
Montrons que ce code est préfixe. Soient et supposons que soit un préfixe de . Alors les premiers bits de et de coïncident, donc . Or, par construction,
puisque la somme contient au moins le terme et que tous les termes sont positifs. Contradiction. Le code est donc préfixe, et ses mots ont bien les longueurs voulues.
Un code binaire préfixe doit coder six symboles avec les longueurs . Calculez la somme de Kraft .
Longueur moyenne et théorème du codage de source
La quantité à minimiser
Sur un message de symboles indépendants de même loi, la loi des grands nombres dit que le nombre total de bits est proche de : minimiser , c'est minimiser la taille du fichier. La question est donc: jusqu'où peut-on descendre?
La borne inférieure: on ne descend pas sous l'entropie
Démonstration. Notons , qui vérifie par l'inégalité de Kraft, et posons . Les sont positifs et de somme : c'est une loi de probabilité sur le même alphabet. Alors , donc
Le second terme est positif ou nul, car entraîne . Pour le premier, utilisons l'inégalité élémentaire , valable pour tout (la fonction est convexe, de dérivée , minimale en où elle vaut ). Avec :
Donc , et (7.7) donne .
L'égalité exige simultanément et pour tout (car n'a lieu que pour ), c'est-à-dire , soit : les probabilités doivent être exactement des puissances de .
La quantité qui apparaît ici est la ; nous venons d'établir au passage qu'elle est toujours positive ou nulle, et nulle seulement si . Elle mesure le prix payé quand on code une source de loi avec un code conçu pour la loi — autrement dit, le coût d'un mauvais modèle.
La borne supérieure: un bit, jamais plus
Démonstration. La première inégalité est le théorème 7.3. Pour la seconde, prenons les longueurs de Shannon–Fano
Ces entiers sont admissibles: comme , on a , d'où
L'inégalité de Kraft étant vérifiée, le sens réciproque du théorème 7.2 fournit un code préfixe de ces longueurs. Sa longueur moyenne se majore en utilisant :
Enfin, le code optimal a par définition une longueur moyenne au plus égale à celle-ci, et au moins égale à par le théorème 7.3.
Une source a quatre symboles de probabilités , , , . Que vaut la longueur moyenne du meilleur code préfixe?
Le codage de Huffman
Le théorème 7.4 garantit qu'un bon code existe, mais sa démonstration ne fournit pas le meilleur: les longueurs de Shannon–Fano sont admissibles, pas optimales. L'algorithme de Huffman (1952), trouvé par un étudiant à qui son professeur avait proposé la question comme sujet d'examen, construit un code optimal, et il est d'une simplicité désarmante.
L'algorithme
L'idée tient en une phrase: les deux symboles les moins fréquents doivent être les plus profonds dans l'arbre, donc frères; on peut alors les fusionner en un seul symbole de fréquence cumulée et recommencer sur une source à un symbole de moins.
fonction Huffman(fréquences):
F ← file de priorité contenant une feuille par symbole,
chaque feuille ayant pour clé sa fréquence
tant que F contient au moins deux éléments:
x ← extraire le minimum de F
y ← extraire le minimum de F
z ← nouveau nœud interne de clé (clé de x) + (clé de y)
fils gauche de z ← x
fils droit de z ← y
insérer z dans F
retourner l'unique élément de F // la racine de l'arbre
Le code se lit ensuite en parcourant l'arbre depuis la racine: descendre à gauche écrit un , descendre à droite un , et le mot d'un symbole est la suite de bits menant à sa feuille. Comme les symboles sont aux feuilles, le code est préfixe par construction.
En Python, une file de priorité s'obtient avec le module heapq; le troisième champ du triplet sert à départager les poids égaux de façon déterministe.
import heapq
def huffman(freq): # freq: symbole -> fréquence
tas = [(f, i, s) for i, (s, f) in enumerate(freq.items())]
heapq.heapify(tas) # file de priorité sur la fréquence
k = len(tas)
while len(tas) > 1:
f1, _, g = heapq.heappop(tas) # les deux plus petits poids
f2, _, d = heapq.heappop(tas)
heapq.heappush(tas, (f1 + f2, k, (g, d))) # fusion du minimum
k +=
Avec symboles, l'algorithme fait fusions, chacune coûtant opérations sur le tas: le coût total est , négligeable devant la lecture du fichier lui-même.
ABRACADABRA, fusion par fusion
Les vingt-trois bits contre les vingt-deux et demi
Comparons maintenant les trois quantités. La version à longueur fixe coûte bits. Le code de Huffman en coûte . Et l'entropie calculée au chapitre 6 donne un plancher de bits.
Il faut dire les choses franchement: est strictement supérieur à , et cet écart n'est pas une imprécision de calcul. Il ne disparaîtra jamais, quel que soit le code préfixe employé, parce que sa cause est structurelle. Les longueurs idéales valent ici
et ce ne sont pas des entiers. Un code préfixe ne peut dépenser que des nombres entiers de bits par symbole; il arrondit donc, et l'arrondi coûte. C'est la pénalité de longueur entière, et elle vaut ici bit sur tout le message, soit bit par symbole. L'encadrement du théorème 7.4 est bien respecté:
Un mot, enfin, sur ce que «le» code de Huffman veut dire: l'article défini est trompeur, et à deux niveaux.
D'abord, les motifs binaires ne sont pas uniques. Échanger le fils gauche et le fils droit d'un nœud interne échange un et un dans tous les mots de son sous-arbre, sans toucher à aucune longueur. Notre arbre a quatre nœuds internes, donc codes le réalisent — par exemple avec tous les autres mots commençant par .
Ensuite, et c'est plus surprenant, les longueurs elles-mêmes ne sont pas uniques. Dès que plusieurs nœuds ont le même poids — à la fusion 2, trois nœuds pèsent — le départage change l'arbre. En énumérant par programme tous les ordres de fusion licites, on trouve exactement trois assignations de longueurs optimales:
| A | B | C | D | R | Total |
|---|---|---|---|---|---|
| 1 | 3 | 3 | 3 | 3 | 23 bits |
| 1 | 2 | 4 | 4 | 3 | 23 bits |
| 1 | 3 | 4 | 4 | 2 | 23 bits |
Les trois saturent l'inégalité de Kraft, et les trois coûtent bits. C'est le total qui est forcé, parce qu'il est optimal; la répartition ne l'est pas, et les motifs binaires encore moins. La première ligne est celle que ce cours retient: c'est la convention de départage du programme ci-dessus — «à poids égal, le nœud entré le premier dans la file sort le premier» — et non une nécessité mathématique. Un décodeur a donc toujours besoin de recevoir la table du code, ou une convention qui permette de la reconstruire.
Huffman est optimal
Démonstration (esquisse). Elle repose sur deux observations, puis une récurrence sur .
Premier lemme: l'arbre d'un code optimal est complet et trie les longueurs. Si un nœud interne n'avait qu'un fils, on le remplacerait par ce fils, raccourcissant tous les mots du sous-arbre: le code ne serait pas optimal. Et si l'on avait avec , échanger les deux mots ferait varier la longueur moyenne de
donc l'échange améliorerait strictement le code: c'est l'argument d'échange. Un code optimal donne donc des mots plus courts aux symboles plus probables.
Second lemme: les deux symboles les moins probables peuvent être pris frères. Dans un arbre complet, une feuille de profondeur maximale a un frère, qui est aussi une feuille (sinon il serait plus profond). Par le premier lemme, ces deux feuilles portent des symboles de probabilité minimale, à un échange près qui ne change pas la longueur moyenne. Il existe donc un code optimal où les deux symboles les moins probables sont frères et de profondeur maximale.
Récurrence. Soit et les deux plus petites probabilités. Fusionnons-les en un symbole de probabilité , ce qui donne une source à symboles. À tout code de correspond un code de obtenu en ajoutant un et un au mot de , et l'on a exactement
car les deux symboles gagnent un bit chacun. Le terme ajouté ne dépend pas du code: minimiser parmi les codes de cette forme revient donc à minimiser . Le second lemme dit qu'un code optimal de est de cette forme. Par hypothèse de récurrence, l'algorithme produit un code optimal pour ; en défusionnant, il produit donc un code optimal pour . Le cas est immédiat: les deux mots et donnent , ce qu'aucun code ne bat.
Réglez les fréquences des quatre symboles: l'arbre de Huffman, le code et la longueur moyenne sont reconstruits à chaque mouvement. La jauge du bas montre la bande [H, H + 1) du théorème du codage de source — la longueur moyenne n'en sort jamais.
Prenez le temps de jouer avec cet explorateur, car il rend visible le contenu du théorème 7.4. Il démarre sur les fréquences , pour lesquelles et : l'écart vaut bit, et c'est l'écart, sur la jauge, entre le trait fin H et le trait épais L.
Mettez maintenant les quatre fréquences à la même valeur: l'entropie vaut bits, l'arbre devient équilibré, les quatre mots font deux bits, et l'écart tombe exactement à zéro — le cas d'égalité du théorème 7.3, puisque est une puissance de . Réglez ensuite : les longueurs deviennent , l'entropie vaut et l'écart s'annule à nouveau. Puis déséquilibrez fortement, par exemple : l'entropie descend à bit, tandis que la longueur moyenne vaut — car aucun mot ne peut faire moins d'un bit, et le symbole A, qui occupe seize places sur dix-neuf, en coûte déjà un. L'écart grimpe à bit, sans jamais atteindre . Quelle que soit la combinaison, le trait L reste dans la bande de H à H+1: c'est le théorème, vu de l'œil.
Une source de symboles émet E fois, T fois, A fois, O fois et N fois. Construisez son code de Huffman et donnez la taille totale du message codé, en bits.
Au-delà de Huffman: le codage arithmétique
Huffman est optimal parmi les codes qui attribuent un nombre entier de bits à chaque symbole. C'est cette clause qui coûte le demi-bit d'ABRACADABRA, et le codage arithmétique (Rissanen, Pasco, années 1970) la supprime en changeant complètement d'objet: il ne code plus les symboles un par un, il code le message entier comme un seul nombre.
L'idée est géométrique. On part de l'intervalle et on le découpe en sous-intervalles dont les longueurs sont les probabilités des symboles. Lire le premier symbole revient à se restreindre à son sous-intervalle; on le redécoupe dans les mêmes proportions, on lit le deuxième symbole, et ainsi de suite. Après symboles, il reste un intervalle dont la largeur est exactement le produit des probabilités des symboles lus:
Tout nombre de cet intervalle identifie le message, et il suffit d'en transmettre un: on choisit celui dont l'écriture binaire est la plus courte. Or nommer un point dans un intervalle de largeur demande environ bits, plus un ou deux bits pour garantir qu'on reste bien à l'intérieur.
Le codage arithmétique a un second avantage, plus important encore en pratique: il se marie naturellement avec un modèle adaptatif. Rien n'oblige à garder les mêmes probabilités d'un symbole au suivant; on peut les mettre à jour au fil du texte, ou les conditionner aux symboles précédents (un u après un q en français est presque certain, donc presque gratuit). Le codeur et le décodeur font la même mise à jour et restent synchronisés. C'est le mécanisme des compresseurs les plus performants d'aujourd'hui, et c'est aussi ce qui les rend lents.
Lempel–Ziv: comprimer sans connaître la source
Huffman et le codage arithmétique ont un défaut commun: ils exigent de connaître les probabilités. Il faut soit les transmettre avec le fichier, soit les deviner. Or on ne dispose en général d'aucun modèle probabiliste d'un fichier quelconque.
Lempel et Ziv (1977, 1978) proposent un changement de stratégie: ne pas modéliser du tout, et se contenter de remplacer les répétitions par des renvois. Un dictionnaire des morceaux déjà vus se construit au fil de la lecture, à l'identique chez le codeur et chez le décodeur — qui n'a donc rien à recevoir de plus.
LZ78: un dictionnaire de phrases
La variante de 1978 découpe le texte en phrases dont chacune est une phrase déjà vue, prolongée d'un caractère. Chaque phrase est émise comme un couple (indice de la phrase antérieure, caractère ajouté), l'indice désignant la phrase vide.
LZ77: une fenêtre glissante
La variante de 1977, celle qu'utilisent les formats courants, ne construit pas de dictionnaire explicite: elle regarde en arrière dans une fenêtre de texte déjà émis et remplace le morceau courant par un triplet (distance en arrière, longueur de la copie, caractère suivant), ou par un littéral quand aucune répétition n'est trouvée.
Sur la chaîne ABRACADABRACADABRA, un programme de recherche exhaustive du plus long facteur répété produit la séquence suivante, vérifiée par reconstruction:
littéral A littéral B littéral R littéral A
littéral C littéral A littéral D
copie (distance 7, longueur 11)
Huit jetons pour dix-huit symboles. Le dernier mérite un regard: la copie a une longueur de alors que la source ne se trouve qu'à caractères en arrière. La copie se chevauche elle-même. Ce n'est pas un bug: le décodeur copie caractère par caractère, si bien que les caractères qu'il vient d'écrire deviennent disponibles pour la suite de la même copie. C'est ainsi que LZ77 encode une répétition périodique à un prix constant. Sur ABABABABABAB, le même programme produit littéral A, littéral B, copie (distance 2, longueur 10): trois jetons pour douze symboles.
Remettez dans l'ordre les étapes de la compression d'un fichier texte par un format de type DEFLATE.
Glissez les éléments pour les mettre dans le bon ordre
- Remplacer chaque répétition par un couple distance-longueur et laisser les autres caractères en littéraux
- Construire un code de Huffman sur ces fréquences et écrire sa table dans l'en-tête
- Lire le fichier et chercher, pour chaque position, la plus longue répétition dans la fenêtre précédente
- Écrire la suite des jetons codés avec ce code de Huffman
- Compter les fréquences des littéraux, des longueurs et des distances produits
La compression avec pertes
Tout ce qui précède respectait une contrainte absolue: restituer l'original bit pour bit. Le théorème 7.3 fixe alors un plancher infranchissable, l'entropie de la source. Pour descendre plus bas, il n'y a qu'un moyen: renoncer à la fidélité exacte.
Le principe de la compression avec pertes tient en une phrase: jeter ce que le destinataire ne remarquera pas. Ce «ne remarquera pas» n'est pas une notion mathématique mais une notion perceptive, et c'est pourquoi ces formats reposent sur des modèles de la vision et de l'audition humaines autant que sur des mathématiques.
Le schéma est presque toujours le même, en trois étages.
- Transformer. On change de représentation pour concentrer l'information. Un signal exprimé en fréquences au lieu d'échantillons temporels, ou une image exprimée en motifs spatiaux au lieu de pixels, a la propriété que la plupart de ses coefficients sont proches de zéro. La transformation elle-même est réversible et ne perd rien.
- Quantifier. On arrondit les coefficients, grossièrement là où l'œil ou l'oreille est peu sensible, finement ailleurs. C'est ici et seulement ici que l'information est détruite, et c'est cet étage que règle le curseur de «qualité».
- Coder sans perte. Les coefficients quantifiés, dont beaucoup sont devenus nuls, sont enfin comprimés par un codeur entropique — exactement ceux de ce chapitre.
JPEG applique ce schéma aux images fixes. Il convertit d'abord les couleurs en une composante de luminance et deux de chrominance, et sous-échantillonne souvent les secondes, parce que l'œil humain distingue moins finement les variations de couleur que celles de clarté. Il découpe ensuite l'image en blocs de pixels et applique à chaque bloc une transformée en cosinus discrète, qui exprime le bloc comme une somme de motifs de fréquences spatiales croissantes. Les coefficients sont divisés par une table de quantification — l'étage destructeur — puis parcourus en zigzag, du plus basse fréquence au plus haute, ce qui regroupe les zéros en fin de parcours; une compression par plages et un codage de Huffman terminent le travail.
MP3 applique le même schéma au son. Un banc de filtres décompose le signal en bandes de fréquences. En parallèle, un modèle psychoacoustique estime, pour chaque instant et chaque bande, le seuil de masquage: le niveau en dessous duquel un son ne sera pas entendu parce qu'un son voisin, plus fort, le couvre. Ce masquage est un phénomène mesuré de l'audition, en fréquence comme dans le temps. Le codeur alloue alors les bits bande par bande de façon que le bruit de quantification reste sous ce seuil, et code enfin les coefficients quantifiés par un codage de Huffman.
Une comparaison de bout en bout
Terminons par une mesure complète sur un texte réel, avec les trois grandeurs côte à côte. Le texte suivant a été écrit sans accents, pour que chaque caractère occupe exactement un octet et que les comptes ne dépendent pas de l'encodage.
Le texte de l'exemple 7.6 compte caractères et son code de Huffman occupe bits. Quel est le taux de compression par rapport au texte brut codé sur un octet par caractère, table non comprise?
Synthèse
- Deux familles, deux contrats. La compression sans perte restitue l'original bit pour bit et son codeur est injectif; la compression avec pertes ne le fait pas, et c'est précisément en confondant des données distinctes qu'elle gagne de la place. Le choix dépend du destinataire, pas de l'algorithme.
- Aucun compresseur sans perte ne raccourcit tout. Le principe des tiroirs suffit à le prouver, et il donne même une majoration: moins d'une suite de bits sur peut être raccourcie de bits. Un compresseur est un pari sur la structure des fichiers réels; zipper deux fois fait grossir le fichier, et des données aléatoires ou déjà comprimées ne se compriment pas.
- Un code préfixe est un arbre. Ses mots sont les feuilles, il se décode de gauche à droite sans jamais revenir en arrière, et l'inégalité de Kraft caractérise exactement les longueurs réalisables: nécessaire par disjonction des sous-arbres, suffisante par la construction des sommes partielles.
Un fichier de Mo est comprimé en ko par un outil sans perte. Que vaut le taux de compression défini par (7.1)?
Exercices
Vous pouvez afficher le corrigé directement sous chaque énoncé après avoir cherché la solution.
- Parmi les suites de longueurs suivantes, lesquelles peuvent être celles d'un code binaire préfixe? ; ; ; .
Une source émet six symboles avec les fréquences suivantes, observées sur émissions: , , , , , .
- Montrer qu'un codeur sans perte qui raccourcit strictement au moins une suite de longueur allonge nécessairement au moins une suite de longueur au plus .
- Soit l'ensemble des suites de longueur et un codeur sans perte. Montrer que la longueur moyenne est strictement supérieure à . On pourra utiliser .
Soit une source binaire sans mémoire émettant avec la probabilité et avec la probabilité , avec .
- Calculer son entropie . On donne et .
- Coder la chaîne
AAABAAABAAABpar LZ78 (couples indice-caractère, l'indice désignant la phrase vide) et donner le dictionnaire obtenu. - Décoder la suite de couples LZ78 suivante, sur l'alphabet des lettres: , , , , .
Références
- Shannon, C. E., A Mathematical Theory of Communication, Bell System Technical Journal, vol. 27, 1948 (l'article fondateur: le théorème du codage de source y est le théorème 9).
- Huffman, D. A., A Method for the Construction of Minimum-Redundancy Codes, Proceedings of the IRE, vol. 40, 1952.
- Cover, T. M. et Thomas, J. A., Elements of Information Theory, 2e éd., Wiley, Hoboken, chap. 5 (inégalité de Kraft, optimalité de Huffman) et chap. 13 (Lempel–Ziv).
- MacKay, D. J. C., Information Theory, Inference and Learning Algorithms, Cambridge University Press (disponible librement), chap. 4 à 6.
- Abelson, H., Ledeen, K. et Lewis, H., Blown to Bits, Addison-Wesley, Boston, chap. 3.
- Sayood, K., Introduction to Data Compression, 5e éd., Morgan Kaufmann, Cambridge (codage arithmétique, JPEG, MP3).