Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
1
Information, Calcul, Communication
Ce videoclip produit par l’Ecole Polytechnique Fédérale de Lausanne fait partie de son cours d’introduction à l’information, à la communication, et au calcul. Il s’inscrit dans le 2e module de ce cours qui porte sur les notions d’échantillonnage et de reconstruction de signaux puis introduit les notions d’entropie et de compression de l’information. Information, Calcul, Communication 2. Information & Communication – Leçon 4: Compression Clip 2: Performance O. Lévêque, commentaire: P. Janson
2
Plan de la leçon Algorithme de Shannon-Fano Encodage de Huffman
Théorème de Shannon Compression avec pertes Le 2e clip de cette leçon va introduire un autre algorithme de codage: celui de Huffman.
3
L’encodage en pratique
Question Doit-on toujours recréer un code original pour représenter chaque message ? Réponse Non ! On peut simplement utiliser un code basé sur les probabilités d’apparition des lettres dans la langue ou le domaine du message (exemple tiré de la déclaration universelle des droits de l’homme) Commençons par poser une question qu’impose à une curiosité naturelle: Doit-on toujours créer un code spécifique pour représenter chaque message donné ? 1 La réponse est fort heureusement Non ! On peut toujours utiliser un code basé sur les probabilités d’apparition des lettres ou chiffres dans la langue dans laquelle est exprimée – ou le domaine d’informations que vise – le message. Il existe en effet dans toutes les langues et pour tous les domaines de connaissances des données statistiques exprimant la probabilité avec laquelle apparait chaque lettre, chiffre, ou symbole. 2 L’exemple ci-contre est basé sur les probabilités d’apparitions des 26 lettres dans la version française de la déclaration universelle des droits de l’homme.
4
Existe-t-il un encodage optimal dans tous les cas ?
NON! Un code peut être optimal pour les probabilités d'apparition des lettres pour une langue donnée mais ne pas l'être pour une autre langue ou même pour des textes particuliers dans la même langue L'exemple ci-dessous provient d'un roman de 300 pages qui respecte une contrainte visible dans cet extrait Il poussa un profond soupir, s'assit dans son lit, s'appuyant sur son polochon. Il prit un roman, il l'ouvrit, il lut; mais il n'y saisissait qu'un imbroglio confus, il butait à tout instant sur un mot dont il ignorait la signification. (extrait de "La disparition" de Georges Perec, 1969) Posons ensuite une autre question légitime, à savoir: Existe-t-il un encodage qui soit optimal pour n’importe quel texte ? 1 Non, bien entendu! Un code peut être optimal pour les probabilités d'apparition des caractères pour un domaine de connaissances donné dans une langue donnée. Mais les probabilités d’apparitions des caractères dépendant du domaine et de la langue Ce qui est optimal pour le domaine et la langue concernées ne l’est probablement pas pour un autre domaine dans une autre langue. 2 L'exemple ci-dessous provient d'un roman de 300 pages qui respecte une contrainte visible dans cet extrait: 3 Il poussa un profond soupir, s'assit dans son lit, s'appuyant sur son polochon. Il prit un roman, il l'ouvrit, il lut; mais il n'y saisissait qu'un imbroglio confus, il butait à tout instant sur un mot dont il ignorait la signification. (extrait de "La disparition" de Georges Perec, 1969) Alors que la lettre «e» est la plus fréquente en anglais comme en français (et pas seulement dans la déclaration universelle des droits de l’homme) elle est remarquablement totalement absente du présent texte. Coder ce texte sur base des statistiques de la langue française est donc possible mais assurément pas optimal.
5
Performance de Shannon-Fano
Du point de vue du taux de compression (nombre moyen de bits/lettre) Shannon-Fano offre une excellente performance en général mais n’est pas nécessairement optimal dans tous les cas => Le temps de calcul n’est pas optimal => Le taux de compression peut être différent selon les regroupements effectués Exemple: soit la séquence de 7 lettres : ABRAXAS Apparitions: 3xA et 1x4 lettres distinctes Regroupements: 4 | | 4 3 2 bits bit 1 2 bits bits 1 3 bits bits Total: 5x2 + 2x3 = 16 bits x1 + 4x3 = 15 bits Forts des réponses à ces 2 questions, penchons-nous maintenant sur les performances de l’algorithme de compression de Shannon-Fano. 1 Exprimons à cet effet la performance de l’algorithme par un taux de compression exprimé par le nombre moyen de bits requis pour coder une lettre. Selon cette métrique Shannon-Fano offre une excellente performance en général mais n’est pas nécessairement optimal dans tous les cas. 2 Son temps de calcul n’est pas optimal, et … 3 … son taux de compression peut varier selon les regroupements effectués 4 Prenons par exemple la séquence de 7 lettres : ABRAXAS. On y voit apparaitre 3x la lettre A et 1 x 4 autres lettres distinctes. 5 Envisageons maintenant 2 groupements différents des probabilités d’apparition des lettres, l’un (que nous appellerons 4/3) groupant à gauche le A et une des 4 autres lettres et à droite les 3 lettres restantes, et l’autre (que nous appellerons 3/4) prenant à gauche juste le A et groupant à droite les 4 autres lettres. 6 Selon Shannon-Fano le 1er groupement permet de coder 5 des 7 lettres avec 2 bits et les 2 lettres restantes avec 3 bits, ce qui requiert au total 5x2 + 2x3 = 16 bits. Selon les mêmes règles de Shannon-Fano le 2e groupement permet de coder le A avec 1 bit et les 4 autres lettres avec 3 bits, ce qui requiert au total 3x1 + 4x3 = 15 bits. On voit donc que la performance de Shannon-Fano dépend du codage choisi et par définition ne peut donc pas être optimal dans tous les cas.
6
Encodage Huffman => En pratique on utilise donc l’algorithme de Huffman qui travaille avec une approche «bottom-up» de groupement des nombres d’apparitions => Initialisation: ensemble des groupes = (lettre, nombre apparitions) Tant que nombre de groupes > 1 Choisir les 2 groupes avec le plus faible nombre d’apparitions Remplacer ces 2 groupes par un nouveau groupe ayant le total du nombre d’apparitions des 2 groupes => Quelle que soit la manière de construire ces groupes on obtient une performance optimale Dans sa thèse de doctorat au MIT David Huffman a démontré un algorithme fondamental qui est optimal dans tous les cas. 1 Cet algorithme suit une approche de groupement des nombres d’apparitions non pas «de haut en bas» mais «de bas en haut». 2 L’algorithme commence par ranger dans un groupe chaque lettre avec son nombre apparitions. 3 Il tente ensuite de fusionner progressivement le nombre de groupes en commençant par les groupes aux nombres d’apparitions les plus faibles. Il choisit ainsi les 2 groupes avec le plus faible nombre d’apparitions et les remplace par un nouveau groupe ayant le total du nombre d’apparitions de ces 2 groupes. Il recommence ensuite cette opération tant que le nombre total de groupes reste > 1. 4 Nous accepterons ici sans démonstration qu’on obtient ainsi une performance optimale quelle que soit la manière de construire ces groupes.
7
Exemple: ABRAXAS => On retrouve bien le regroupement et le code correspondant 3/4 qui est optimal mais n’aurait pas nécessairement été trouvé par Shannon-Fano Lettre A B R X S Nombre d’apparitions 3 1 A titre d’exemple, reprenons le message ABRAXAS que l’algorithme de Shannon-Fano ne traitait pas nécessairement de façon optimale. La table ci-contre donne les nombres d’apparitions de chacune de ses lettres. 1 Redessinons cette table de façon conforme à l’algorithme de Huffman en faisant simplement un groupe de chaque lettre avec son nombre d’apparitions. 2 L’algorithme de Huffman commence par fusionner 2 des plus petits groupes, p.ex. X et S. 3 Il fusionne ensuite les 2 plus petits groupes suivants, B et R, ce qui laisse A dans son propre groupe. 4 Il recommence ensuite, fusionnant ainsi les 2 plus petits groupes de 2 apparitions chacun en un groupe de 4 apparitions, B, R, X, et S, laissant toujours A dans son propre groupe. 5 Il termine enfin par la fusion des deux groupes restants en un seul, ce qui termine l’algorithme. 6 Pour encoder les 5 lettres selon les groupements obtenus par cet algorithme, on commence par attribuer aux groupes de l’avant-dernier niveau les codes respectifs de 1 et 0. 7 On fait ensuite successivement de même pour tous les groupes du niveau inférieur suivant. 8 Et on termine par les groupes originaux, ce qui donne … 9 … le code 1 pour A … 10 … le code 011 pour B … 11 … et ainsi de suite Groupes de niveau 3 A, B, R, X, S: 7 Groupes originaux A: 3 B: 1 R: 1 X: 1 S: 1 Groupes de niveau 2 A: 3 B, R, X, S: 4 Code 1 Groupes de niveau 1 A: 3 B, R: 2 X, S: 2 Code 1 Code 1 011 010 001 000
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.