codage préfixe.gcolas/algo-licence/slides/huffman-slides.pdf · lecture du texte et stockage dans...
TRANSCRIPT
![Page 1: Codage préfixe.gcolas/algo-licence/slides/huffman-slides.pdf · lecture du texte et stockage dans un tableau de char calcul de l’alphabet et des fréquences construction de l’arbre](https://reader034.vdocuments.pub/reader034/viewer/2022052613/604ecfbf76bd405063601637/html5/thumbnails/1.jpg)
Codage préfixe.
A : alphabetS : texte à coderf(c) : fréquence du caractère c dans S
à chaque caractère c correspond un code Φ(c) (suite de bits)
aucun code n’est le préfixe d’un autre
▽ – p.1
![Page 2: Codage préfixe.gcolas/algo-licence/slides/huffman-slides.pdf · lecture du texte et stockage dans un tableau de char calcul de l’alphabet et des fréquences construction de l’arbre](https://reader034.vdocuments.pub/reader034/viewer/2022052613/604ecfbf76bd405063601637/html5/thumbnails/2.jpg)
Codage préfixe.
A : alphabetS : texte à coderf(c) : fréquence du caractère c dans S
à chaque caractère c correspond un code Φ(c) (suite de bits)
aucun code n’est le préfixe d’un autre
le codage est optimal si
∑
c∈A
f(c) × |Φ(c)|
est minimal (taille du texte après codage)
– p.1
![Page 3: Codage préfixe.gcolas/algo-licence/slides/huffman-slides.pdf · lecture du texte et stockage dans un tableau de char calcul de l’alphabet et des fréquences construction de l’arbre](https://reader034.vdocuments.pub/reader034/viewer/2022052613/604ecfbf76bd405063601637/html5/thumbnails/3.jpg)
Arbre de codage.
On représente un codage préfixe par un arbre binaire
Codes
c : 10
0 1
1010
a : 00b : 01
d : 11da b c
Chaque feuille correspond à un caractère de l’alphabetChaque branche est étiquetée par la valeur 0 ou 1 (un bit)
dacadbaac → 11-00-10-00-11-01-00-00-10 (taille=18)
– p.2
![Page 4: Codage préfixe.gcolas/algo-licence/slides/huffman-slides.pdf · lecture du texte et stockage dans un tableau de char calcul de l’alphabet et des fréquences construction de l’arbre](https://reader034.vdocuments.pub/reader034/viewer/2022052613/604ecfbf76bd405063601637/html5/thumbnails/4.jpg)
Codage.
Soit un texte à coder S
calcul de l’alphabet A (et des fréquences)
calcul des codes des caractères de l’alphabet
parcours du texte en produisant à la place de chaque caractèreson code (parcours des feuilles vers la racine lorsqu’on utilise l’arbre de codage)
– p.3
![Page 5: Codage préfixe.gcolas/algo-licence/slides/huffman-slides.pdf · lecture du texte et stockage dans un tableau de char calcul de l’alphabet et des fréquences construction de l’arbre](https://reader034.vdocuments.pub/reader034/viewer/2022052613/604ecfbf76bd405063601637/html5/thumbnails/5.jpg)
Décodage.
codes + texte codé → texte original
Il n’y a pas d’ambiguité dans un codage préfixe, puisqu’aucun coden’est le préfixe d’un autre
analyse du texte codé en recherchant les codes (parcours de la racine
vers les feuilles dans l’arbre de codage)
La représentation des codes sous la forme d’un arbre de codagefacilite l’analyse.
– p.4
![Page 6: Codage préfixe.gcolas/algo-licence/slides/huffman-slides.pdf · lecture du texte et stockage dans un tableau de char calcul de l’alphabet et des fréquences construction de l’arbre](https://reader034.vdocuments.pub/reader034/viewer/2022052613/604ecfbf76bd405063601637/html5/thumbnails/6.jpg)
Codage préfixe optimal.
Idée : les caractères les plus fréquents ont des codes plus courts
L’arbre de codage est completarbre de codage optimal étiqueté par les caractères et les fréquences
4
2 1
2
Codesa : 0b : 111c : 10d : 110
a
bd
c 3
5
9
0
0
0
1
1
1
T fréquences
dacadbaac → 110-0-10-0-110-111-0-0-10 (taille=17)
– p.5
![Page 7: Codage préfixe.gcolas/algo-licence/slides/huffman-slides.pdf · lecture du texte et stockage dans un tableau de char calcul de l’alphabet et des fréquences construction de l’arbre](https://reader034.vdocuments.pub/reader034/viewer/2022052613/604ecfbf76bd405063601637/html5/thumbnails/7.jpg)
Codage préfixe optimal.
Pour l’alphabet A, les fréquences f et l’arbre T
B(T ) =∑
c∈A
f(c) × pT (c)
est minimal (pT (c) représente la profondeur de la feuille d’étiquette c)
Tp ( )b
4
2 1
2
a
bd
c 3
5
9
0
0
0
1
1
1
T
– p.6
![Page 8: Codage préfixe.gcolas/algo-licence/slides/huffman-slides.pdf · lecture du texte et stockage dans un tableau de char calcul de l’alphabet et des fréquences construction de l’arbre](https://reader034.vdocuments.pub/reader034/viewer/2022052613/604ecfbf76bd405063601637/html5/thumbnails/8.jpg)
Codage préfixe optimal : Huffman.
Huffman propose un algorithme glouton pour la construction d’un arbrede codage optimal
initialisation :construire l’ensemble F des arbres correspondants auxcaractères de l’alphabet (arbres-feuilles),
itération :tant que F contient plus d’un arbre, fusionner deux arbres dans F .
– p.7
![Page 9: Codage préfixe.gcolas/algo-licence/slides/huffman-slides.pdf · lecture du texte et stockage dans un tableau de char calcul de l’alphabet et des fréquences construction de l’arbre](https://reader034.vdocuments.pub/reader034/viewer/2022052613/604ecfbf76bd405063601637/html5/thumbnails/9.jpg)
Codage préfixe optimal : Huffman.
Texte : axabataaxbcbtaabxxaazazaa
Calcul des fréquences
Un arbre par caractère de l’alphabet
a : 12 b : 4 c : 1 t : 2 z : 2 x : 4
Ensuite
tant qu’il y a plus d’un arbre
choisir deux arbres de poids minimaux
fusionner ces deux arbres : la nouvelle racinea pour poids la somme des poids des racines de ses fils
– p.8
![Page 10: Codage préfixe.gcolas/algo-licence/slides/huffman-slides.pdf · lecture du texte et stockage dans un tableau de char calcul de l’alphabet et des fréquences construction de l’arbre](https://reader034.vdocuments.pub/reader034/viewer/2022052613/604ecfbf76bd405063601637/html5/thumbnails/10.jpg)
Codage préfixe optimal : Huffman.
c : 1 t : 2a : 12 b : 4 z : 2 x : 4
– p.9
![Page 11: Codage préfixe.gcolas/algo-licence/slides/huffman-slides.pdf · lecture du texte et stockage dans un tableau de char calcul de l’alphabet et des fréquences construction de l’arbre](https://reader034.vdocuments.pub/reader034/viewer/2022052613/604ecfbf76bd405063601637/html5/thumbnails/11.jpg)
Codage préfixe optimal : Huffman.
a : 12 b : 4
c : 1 t : 2
x : 43z : 2
– p.10
![Page 12: Codage préfixe.gcolas/algo-licence/slides/huffman-slides.pdf · lecture du texte et stockage dans un tableau de char calcul de l’alphabet et des fréquences construction de l’arbre](https://reader034.vdocuments.pub/reader034/viewer/2022052613/604ecfbf76bd405063601637/html5/thumbnails/12.jpg)
Codage préfixe optimal : Huffman.
a : 12
z : 2
c : 1 t : 2
b : 4 x : 4
3
5
– p.11
![Page 13: Codage préfixe.gcolas/algo-licence/slides/huffman-slides.pdf · lecture du texte et stockage dans un tableau de char calcul de l’alphabet et des fréquences construction de l’arbre](https://reader034.vdocuments.pub/reader034/viewer/2022052613/604ecfbf76bd405063601637/html5/thumbnails/13.jpg)
Codage préfixe optimal : Huffman.
a : 12
z : 2
c : 1 t : 2
x : 4 b : 43
85
– p.12
![Page 14: Codage préfixe.gcolas/algo-licence/slides/huffman-slides.pdf · lecture du texte et stockage dans un tableau de char calcul de l’alphabet et des fréquences construction de l’arbre](https://reader034.vdocuments.pub/reader034/viewer/2022052613/604ecfbf76bd405063601637/html5/thumbnails/14.jpg)
Codage préfixe optimal : Huffman.
z : 2
c : 1 t : 2
x : 4 b : 4
a : 12
3
8
13
5
– p.13
![Page 15: Codage préfixe.gcolas/algo-licence/slides/huffman-slides.pdf · lecture du texte et stockage dans un tableau de char calcul de l’alphabet et des fréquences construction de l’arbre](https://reader034.vdocuments.pub/reader034/viewer/2022052613/604ecfbf76bd405063601637/html5/thumbnails/15.jpg)
Codage préfixe optimal : Huffman.
0 1
1
1
0
0
0
01 1
a : 12
z : 2
c : 1 t : 2
x : 4 b : 43
8
13
25
5
– p.14
![Page 16: Codage préfixe.gcolas/algo-licence/slides/huffman-slides.pdf · lecture du texte et stockage dans un tableau de char calcul de l’alphabet et des fréquences construction de l’arbre](https://reader034.vdocuments.pub/reader034/viewer/2022052613/604ecfbf76bd405063601637/html5/thumbnails/16.jpg)
Codage préfixe optimal : Huffman.
Codes
a :
z :
c :
t :
x :
b :
0
100
1010
1011
110
111
0 1
1
1
0
0
0
01 1
a : 12
z : 2
c : 1 t : 2
x : 4 b : 43
8
13
25
5
axabataaxbcbtaabxxaazazaa (24 caractères)011001110101100110111101011110110011111011000100010000 (54 bits)01100111-01011001-10111101-01111011-00111110-11000100-010000 (7octets)
– p.15
![Page 17: Codage préfixe.gcolas/algo-licence/slides/huffman-slides.pdf · lecture du texte et stockage dans un tableau de char calcul de l’alphabet et des fréquences construction de l’arbre](https://reader034.vdocuments.pub/reader034/viewer/2022052613/604ecfbf76bd405063601637/html5/thumbnails/17.jpg)
Codage préfixe optimal : Huffman.
procédure Huffman (T : texte){F est une file de priorité}1 calculer l’alphabet A et les fréquences f2 F = ∅,3 pour chaque c ∈ A faire4 F = F ∪ {CreerNoeud(c/f(c),NIL,NIL)},5 tant que card(F ) ≥ 2 faire6 a =ExtraireLeMin(F ),7 b =ExtraireLeMin(F ),8 F = F ∪ {CreerNoeud(f(a) + f(b), a, b)},9 renvoyer (F ),
ExtraireLeMin(F ) : renvoie à la structure de tas binaire
– p.16
![Page 18: Codage préfixe.gcolas/algo-licence/slides/huffman-slides.pdf · lecture du texte et stockage dans un tableau de char calcul de l’alphabet et des fréquences construction de l’arbre](https://reader034.vdocuments.pub/reader034/viewer/2022052613/604ecfbf76bd405063601637/html5/thumbnails/18.jpg)
Huffman : optimalité
Deux propriétés :
propriété du choix glouton : il existe toujours une solutionoptimale qui contient un premier choix glouton
propriété de sous-structure optimale : toute solution optimaleprivée d’un choix est elle-même une solution optimale dusous-problème.
– p.17
![Page 19: Codage préfixe.gcolas/algo-licence/slides/huffman-slides.pdf · lecture du texte et stockage dans un tableau de char calcul de l’alphabet et des fréquences construction de l’arbre](https://reader034.vdocuments.pub/reader034/viewer/2022052613/604ecfbf76bd405063601637/html5/thumbnails/19.jpg)
Huffman : optimalité (choix glouton)
Propriété. Si x et y sont les caractères de fréquences les plus faiblesalors il existe un arbre de codage optimal dans lequel x et y sont frères(et de profondeur maximale).
Preuve.Soit T un arbre de codage optimal,a et b deux frères de profondeur maximale.On suppose f(x) ≤ f(y) et f(a) ≤ f(b).Donc
f(x) ≤ f(a) et f(y) ≤ f(b)
En échangeant a et x d’une part, b et y d’autre part,on obtient un nouvel arbre de codage T ′ qui fournit uncodage au moins aussi bon que T
B(T ) =X
c∈A
f(c) × pT (c)
x
a b
y
T
– p.18
![Page 20: Codage préfixe.gcolas/algo-licence/slides/huffman-slides.pdf · lecture du texte et stockage dans un tableau de char calcul de l’alphabet et des fréquences construction de l’arbre](https://reader034.vdocuments.pub/reader034/viewer/2022052613/604ecfbf76bd405063601637/html5/thumbnails/20.jpg)
Huffman : optimalité (choix glouton)
x
a b
y
T T’
a
x y
b
– p.19
![Page 21: Codage préfixe.gcolas/algo-licence/slides/huffman-slides.pdf · lecture du texte et stockage dans un tableau de char calcul de l’alphabet et des fréquences construction de l’arbre](https://reader034.vdocuments.pub/reader034/viewer/2022052613/604ecfbf76bd405063601637/html5/thumbnails/21.jpg)
Huffman : optimalité (sous-structure optimale)
Trouver un arbre de codage optimal pour le problème P
a : 12 b : 4 c : 1 d : 2 e : 2 f : 4
revient à trouver un arbre de codage optimal pour le problème P ′
(obtenu après la fusion des arbres de plus petits poids)
a : 12 b : 4 e : 2 f : 4z1 : 3
Il suffit de montrer qu’à tout arbre optimal pour P ′ correspond un arbreoptimal pour P
– p.20
![Page 22: Codage préfixe.gcolas/algo-licence/slides/huffman-slides.pdf · lecture du texte et stockage dans un tableau de char calcul de l’alphabet et des fréquences construction de l’arbre](https://reader034.vdocuments.pub/reader034/viewer/2022052613/604ecfbf76bd405063601637/html5/thumbnails/22.jpg)
Huffman : optimalité (sous-structure optimale)
c et d caractères de plus petites fréquences dans P
T un arbre de codage pour P
T ′ : arborescence dérivée de T en substituant la feuille z au noeudinterne de fils c et d, avec f(z) = f(c) + f(d)
T T’
c : f(c) d : f(d)
z : f(c)+f(d)
Propriété. T ′ est optimal ⇔ T est optimal
– p.21
![Page 23: Codage préfixe.gcolas/algo-licence/slides/huffman-slides.pdf · lecture du texte et stockage dans un tableau de char calcul de l’alphabet et des fréquences construction de l’arbre](https://reader034.vdocuments.pub/reader034/viewer/2022052613/604ecfbf76bd405063601637/html5/thumbnails/23.jpg)
Huffman : optimalité (sous-structure optimale)
a : 12 b : 4 c : 1 d : 2 e : 2 f : 4
a : 12 b : 4 f : 4z2 : 5
z3 : 8
a : 12 z4:13
a : 12 z4:13
a : 12
z3 : 8 z2 : 5
b : 4 f : 4
a : 12
z2 : 5
b : 4 f : 4
a : 12
z1 : 3 e : 2
b : 4 f : 4 f : 4
a : 12
c : 1 d : 2
a : 12 b : 4 e : 2 f : 4z1 : 3
a : 12 z2 : 5
25
25
13
25
13
8
25
13
8 5
25
13
8 5
3
– p.22
![Page 24: Codage préfixe.gcolas/algo-licence/slides/huffman-slides.pdf · lecture du texte et stockage dans un tableau de char calcul de l’alphabet et des fréquences construction de l’arbre](https://reader034.vdocuments.pub/reader034/viewer/2022052613/604ecfbf76bd405063601637/html5/thumbnails/24.jpg)
Projet
lecture du texte et stockage dans un tableau de char
calcul de l’alphabet et des fréquences
construction de l’arbre de codage optimal en utilisant un tasbinaire
codage et sauvegarde des codes et du texte codé
procédure de reconstruction de l’arbre et de décodage
Le texte codé sous forme de caractères ASCII 0 et 1 n’est pas compressé.
Il faut produire une suite de bits stockés dans des unsigned char par exemple, enutilisant l’opérateur de décalage << et écride dans des fichiers binaires (fread etfwrite)
– p.23
![Page 25: Codage préfixe.gcolas/algo-licence/slides/huffman-slides.pdf · lecture du texte et stockage dans un tableau de char calcul de l’alphabet et des fréquences construction de l’arbre](https://reader034.vdocuments.pub/reader034/viewer/2022052613/604ecfbf76bd405063601637/html5/thumbnails/25.jpg)
Projet : modulesmodule toto.c :
#include <stdio.h>
#include ‘‘titi.h’’
#include ‘‘toto.h’’
UN_TYPE *maTable = NULL; /* Variable globale */
int Bidon(int a, int b)
{
.....
}
Fichier toto.h :typedef struct bidon *UN_TYPE;
struct bidon {
....
};
extern UN_TYPE *maTable; /* Utilisable dans d’autres modules */
int Bidon(int a, int b); /* Utilisable dans d’autres modules */
– p.24