Codage préfixe.gcolas/algo-licence/slides/huffman-slides.pdf · lecture du texte et stockage dans...

25
Codage préfixe. A : alphabet S : texte à coder f (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

Transcript of Codage préfixe.gcolas/algo-licence/slides/huffman-slides.pdf · lecture du texte et stockage dans...

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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