Le code de Huffman: est une méthode de compression statistique de données qui permet de réduire la longueur du codage d'un alphabet. Le code de Huffman.

Slides:



Advertisements
Présentations similaires
Chapitre 3 La numération octale et hexadécimale. Chapitre 3 : La numération octale et hexadécimale 1 - Introduction 2 - Le système Octal Définition.
Advertisements

Université de Nantes CHORD Vincent Trève. Introduction ● Problématique – Comment accéder efficacement aux données réparties sur un système pair à pair?
CINI – Li115 1 Semaine 9 Algorithmes de tri ● Introduction ● Tri à bulle ● - principe ● - algorithme ● - efficacité ● Tri par sélection ● - principe, algorithme,
7. Problème de flot à coût minimum. 7.1 Graphes, graphes orientés, réseaux Un graphe G =(V, E) est constitué d’un ensemble non vide fini de sommets V.
Volée 1316 S3 Cours No 2_3 : Le nombre en 1-2H. Les fonctions du nombre  Dénombrer, énumérer, décrire une collection. Aspect cardinal  Dater, classer,
Programmation en C++ Standard Library
Valeurs de toutes les différences observables sous H0
La Compression de Données
Coloration de graphe, backtracking, branch and bound
Un Algorithme , c'est Quoi ?
LES TABLEAUX EN JAVA.
Représentation des nombres réels
Session 1 6 mars 2017 Plateforme ICONICS Justine Guégan
Algorithme et programmation
CCNP Routage Chapitre 4 - Questionnaire N°1
Algorithmique Avancée et Complexité Chap2:Complexité et Optimalité
Plateforme CountrySTAT Aperçu global de la préparation des tableaux dans la nouvelle plateforme CountrySTAT FORMATION DES POINTS FOCAUX SUR LE SYSTEME.
1.3 COORDONNÉES DES POINTS
Cours 4 : Tris de Tableaux
Ce videoclip produit par l’Ecole Polytechnique Fédérale de Lausanne
Références.
IFT 615 – Intelligence artificielle Recherche heuristique
Javadoc et débogueur Semaine 03 Version A16.
Principes de programmation (suite)
2°9 lycée Beauregard à Montbrison
Plan Introduction Parcours de Graphe Optimisation et Graphes
VI. Tri par tas (Heap sort)
Technologies de l’intelligence d’affaires Séance 12
Programmation Impérative II
UMLV ã Arbres de recherche AVL
Implantation d’un îlot ou d’une Chaîne de Production
Tableau de bord des risques
Techniques du Data Mining
Information, Communication, Calcul
Stabilité des porteurs horizontaux (Poutres)
Création Et Modification De La Structure De La Base De Données
1.2 dénombrement cours 2.
Chapter 12: Structures de données
Formation sur les bases de données relationnelles.
Techniques du Data Mining
Diagrammes UML 420-KE2-LG.
Chapitre 3 : Caractéristiques de tendance centrale
Arbres de décision.
Modélisation objet avec UML
B.Shishedjiev - Informatique
4°) Intervalle de fluctuation :
Lois de Probabilité Discrètes
Élections locales probabilistes
Université de la méditerranée
MATHÉMATIQUES FINANCIÈRES I
Reconnaissance de formes: lettres/chiffres
Information, Calcul, Communication
NUMÉRATION POSITIONNELLE / PRINCIPE DE GROUPEMENT
Logiciel de présentation
IFT313 Introduction aux langages formels
CSI 3505 Algorithmes Voraces
CSI 3505 / Automne 2005: Conception et Analyse des Algorithmes I.
Tris Simples/Rapides.
Chapitre 2 : Représentation de l’information dans la machine Introduction Représentation des nombres négatifs –Signe / valeur absolue –Complément à 1 –Complément.
Arbre binaire.
Chapter 11: Récursivité Java Software Solutions Second Edition
UMLV ã Plus courts chemins Toutes paires d'états
Elections locales probabilistes
DICTIONNAIRES (MAPS).
Type Tableau Partie 1 : Vecteurs
LE DEBIT D’ATELIER FONCTION
Les données structurées et leur traitement
Dérivation – Fonctions cosinus et sinus
Séquence 1:Analyse du système d’information comptable
Transcription de la présentation:

Le code de Huffman: est une méthode de compression statistique de données qui permet de réduire la longueur du codage d'un alphabet. Le code de Huffman (1952) est un code de longueur variable optimal, c'est-à-dire tel que la longueur moyenne d'un texte codé soit minimale. On observe ainsi des réductions de taille de l'ordre de 20 à 90%. Dr. Nejib Zaguia 12/28/2018

log2 C bits TEST 100001011100 Codes de longueur fixe: Chaque caractères est codé avec le même nombre de bits. Pour C caractères on a besoin de log2 C bits Simple, et facile a manipuler TEST 100001011100 nl 110 es 101 T 100 S 011 I 010 E 001 A 000 Dr. Nejib Zaguia 12/28/2018

Exemple 1 nl 110 es 101 T 100 S 011 I 010 E 001 A 000 A E I S T es nl 1 000 001 010 011 100 101 110 Dr. Nejib Zaguia 12/28/2018

longueur variable Exemple 2 nl 11 es 101 T 100 S 011 I 010 E 001 A 000 1 000 001 010 011 100 101 11 Dr. Nejib Zaguia 12/28/2018

Exemple 3 TEST = 11100000011 Symbol Code 00001 nl 001 es 11 T 00000 S I es A E T S nl 1 00000 00001 0001 001 01 10 11 Symbol Code 00001 nl 001 es 11 T 00000 S 0001 I 10 E 01 A TEST = 11100000011 Dr. Nejib Zaguia 12/28/2018

CSI 3505 Algorithmes Voraces 110 101 100 011 010 001 000 Code Longueur fixe 441 15 54 96 12 36 105 123 Total Bits Longueur variable 5 18 32 4 35 41 Fréquence 363 25 64 20 48 70 82 Caractère 00001 nl es 11 T 00000 S 0001 I 10 E 01 A Dr. Nejib Zaguia 12/28/2018

Pour qu’un codage soit sans ambiguïté il doit avoir la propriété de préfixe: une séquence binaire ne peut jamais être à la fois représentative d'un élément codé et constituer le début du code d'un autre élément. Dr. Nejib Zaguia 12/28/2018

Ou 11 01 00001 11 00 P Symbole Code 00001 nl 001 es 11 T 00000 S 0001 11010000111 = 11 01 00 001 11 00 P Symbole Code 00001 nl 001 es 11 T 00000 S 0001 I 10 E 01 A Ou 11 01 00001 11 I es P A E T S nl 1 00000 00001 0001 001 01 10 11 Préfixe!! Dr. Nejib Zaguia 12/28/2018

l'arbre de décodage du code Cette caractéristique préfixe du codage permet une codification à l'aide d'une structure d'arbre binaire. l'arbre de décodage du code Les caractères sont placés uniquement sur les feuilles de l’arbre. Tout nœud interne (c'est-à-dire qui n'est pas une feuille) a deux fils non vides. Dr. Nejib Zaguia 12/28/2018

CSI 3505 Algorithmes Voraces Problème: Input Une liste de caractères et leurs fréquences. Output l'arbre de décodage du code avec un Coût total minimal Coût total = ls = nombre de bits du code pour le caractère s fs = fréquences du caractère s Dr. Nejib Zaguia 12/28/2018

CSI 3505 Algorithmes Voraces Algorithme de Huffman (1952) un code optimal de longueur variable Huffman propose de recoder les données qui ont une occurrence très faible sur une longueur binaire supérieure à la moyenne, et recoder les données très fréquente sur une longueur binaire très courte. Dr. Nejib Zaguia 12/28/2018

L'algorithme opère sur une forêt L'algorithme opère sur une forêt. Ceux-ci sont des arbres étiquetés complets: tout noeud interne (c'est-à-dire qui n'est pas une feuille) a deux fils non-vides. La forêt initiale est formée d'un arbre à un noeud pour chaque caractère du langage-source, dont l'étiquette est la fréquence (ou probabilité) de ce caractère . La forêt finale est formée d'un unique arbre, qui est l'arbre de décodage du code. L'algorithme est de type vorace «glouton»: il choisit à chaque étape les deux arbres d'étiquettes minimales, soit x et y, et les remplace par l'arbre formé de x et y et ayant comme étiquette la somme de l'étiquette de x et de l'étiquette de y. Dr. Nejib Zaguia 12/28/2018

Le code d'un caractère est alors déterminé en suivant le chemin depuis la racine de l'arbre jusqu'à la feuille associée à ce caractère en concaténant successivement un 0 ou un 1 selon que la branche suivie est à gauche ou à droite. Dr. Nejib Zaguia 12/28/2018

Example: Supposons que les lettres a coder ont les fréquences suivantes: 32 25 12 4 30 18 5 A E I S T P L Dr. Nejib Zaguia 12/28/2018

Trier par ordre de fréquence La premiere chose: Trier par ordre de fréquence 4 5 12 18 25 30 32 S L I P E T A Mettre en ordre: mergesort O(n log n) Dr. Nejib Zaguia 12/28/2018

4 5 12 18 25 30 32 S L I P E T A 9 Choisir les deux fréquence les moins élevées et les utiliser pour fabriquer un arbre T1 Dr. Nejib Zaguia 12/28/2018

Réinsérer dans la liste d’arbres ordonnée 9 12 18 25 30 32 I P E T A Insérer dans liste ordonée: O(log(n)) pour trouver endroit l’index d’insertion + whatever pour insérer (dépend de l’implémentation de la liste) 21 T2 Réinsérer dans la liste d’arbres ordonnée Dr. Nejib Zaguia 12/28/2018

18 25 30 32 P E T A T1 I S L T2 21 Dr. Nejib Zaguia 12/28/2018

E 25 T 30 A 32 T1 I P S L T2 T3 39 T4 55 Dr. Nejib Zaguia 12/28/2018

T E T4 55 T1 I P A S L T2 T3 T5 71 126 T6 Dr. Nejib Zaguia 12/28/2018

T1 I T P A E S L T2 T3 T4 T5 T6 Symbol Code 00001 L 001 P 11 T 00000 S Codage T1 I T P A E S L T2 T3 T4 T5 126 T6 Symbol Code 00001 L 001 P 11 T 00000 S 0001 I 10 E 01 A 1 Dr. Nejib Zaguia 12/28/2018

Ne fait aucune différence P A E S L T E A P S L I Ne fait aucune différence Dr. Nejib Zaguia 12/28/2018

Maintenant, il faut implémenter l’algo aussi efficacement que possible: Dr. Nejib Zaguia 12/28/2018

Q = C mis dans une structure ordonnée while(Q.size( ) > 1){ Huffman (C){ Q = C mis dans une structure ordonnée while(Q.size( ) > 1){ x = Extraire-Minimum (Q) y = Extraire-Minimum (Q) fabriquer z à partir de x et y f[z] = f[x] + f[y] Insérer z dans Q } Retourner l’arbre fabriqué à partir du seul élt de Q Dr. Nejib Zaguia 12/28/2018

Ca se résume à implémenter ces trucs là aussi efficacement que possible: … Q = C mis dans une structure ordonnée x = Extraire-Minimum (Q) y = Extraire-Minimum (Q) fabriquer z à partir de x et y Insérer z dans Q Dr. Nejib Zaguia 12/28/2018

fabriquer z à partir de x et y class arbreDeChar{ char lettre; int Fréquence const arbreDeChar* Gauche const arbreDeChar* Droit public: boolean estFeuille() { return Gauche==Droit==NULL}; arbreDeChar(char a, int f): Gauche(NULL), Droit(Null), Frequence(f) {lettre=a;}; arbreDeChar( const arbreDeChar& d, const arbreDeChar& g): lettre((char)0), Frequence(d.Frequence + g.frequence), Droit(&d),Gauche(&g){ } 39 T3 21 T2 P 18 T1 I S L Dr. Nejib Zaguia 12/28/2018

Compléter class arbreDeChar A faire en classe: Compléter class arbreDeChar Dr. Nejib Zaguia 12/28/2018

Fabriquer une structure dans laquelle on peut: Retirer des arbreDeChar par ordre de fréquence aussi efficacement que possible Insérer de nouveaux arbreDeChar aussi facilement que possible. (Ca éliminent tableaux (pourquoi ?)) Dr. Nejib Zaguia 12/28/2018

Comme on retire de manière inversement proportionel à la fréquence, on peut se servir de la variable int Fréquence pour minimiser nos opération de base. Dr. Nejib Zaguia 12/28/2018

Utilisons un arbre binaire dont les noeuds sont… Des objets de type arbreDeChar Et qu’on remplira toujours de doite à gauche et de manière à le garder aussi feuillu que possible Dr. Nejib Zaguia 12/28/2018

Sauf que on va jouer sur la structure de l’arbre pour faciliter nos opération. Requirements Dr. Nejib Zaguia 12/28/2018

Il faut que ca soit aussi facile que possible de retirer les nœud contenant des arbreDeChar à plus basse fréquence. (et donc de les trouver) - Il faut que ca soit aussi facile que possible d’insérer de nouveaux nœuds. Dr. Nejib Zaguia 12/28/2018

T1 I P S L T2 T3 39 A 32 T E T4 55 On va nécéssairement chercher à partir de la racine, donc on veut que les nœud à fréquence plus basses soient plus proche de la racine. Dr. Nejib Zaguia 12/28/2018

A 32 T1 I P S L T2 T3 39 T E T4 55 . 56 . 65 .. 45 . 67 . 78 . 88 . 95 . 56 . 67 Dr. Nejib Zaguia 12/28/2018

L’arbreDeChar qui a la plus basse fréquence est mis à la racine L’arbreDeChar qui a la plus basse fréquence est mis à la racine. Il est donc très facile a extraire La racine de cet arbre à plus basse fréquence que tous ces sous arbres Maintenant, on a 2 sous-arbres A 32 T1 I P S L T2 T3 39 T E T4 55 La racine de cet arbre à plus basse fréquence que tous ces sous arbres La racine de cet arbre à plus basse fréquence que tous ces sous arbres Dr. Nejib Zaguia 12/28/2018

Il faut recombiner de manière à garder la propriété d’ordre dont on se sert 39 A 32 T E T4 55 La racine de cet arbre à plus basse fréquence que tous ces sous arbres La racine de cet arbre à plus basse fréquence que tous ces sous arbres Dr. Nejib Zaguia 12/28/2018

Supposons que notre arbre binaire est plein…. Hauteur (définie par le nombre d’arc de la racine a la feuille) H 2H+1-1 noeuds Dr. Nejib Zaguia 12/28/2018

H = 2 23-1 = 7 noeuds. Dr. Nejib Zaguia 12/28/2018

Quand on enleve… On remplace… Dr. Nejib Zaguia 12/28/2018

Si on a encore la propriété que la racine à fréquence plus basse on garde… Sinon: on échange contre celui des deux enfants qui a la fréquence la plus basse. Dr. Nejib Zaguia 12/28/2018

On continue comme ca jusqu’a ce qu’on trouve le bon endroit ou insérer… On ne remplacera jamais plus que H. Donc: Enlever un élément ne coute que O(log n) Dr. Nejib Zaguia 12/28/2018

Rajouter un élément coute aussi O(log n). On rajoute l’élément en feuille et on le place à la bonne position Démo:http://www.cs.auckland.ac.nz/software/AlgAnim/heaps.html Dr. Nejib Zaguia 12/28/2018

Q = C mis dans une structure ordonnée while(Q.size( ) > 1){ Huffman (C){ Q = C mis dans une structure ordonnée while(Q.size( ) > 1){ x = Extraire-Minimum (Q) y = Extraire-Minimum (Q) fabriquer z à partir de x et y f[z] = f[x] + f[y] Insérer z dans Q } Retourner l’arbre fabriqué à partir du seul élt de Q Dr. Nejib Zaguia 12/28/2018

Total: O(n logn) Complexité: O(n) log (n) Initialisation du heap n-1 itérations dans la boucle while: chaque itération (nombre constant d’opérations) O(n) log (n) Total: O(n logn) Dr. Nejib Zaguia 12/28/2018