compression { m ethode de hu manlecroq/cours/huff.pdf · la m ethode de hu man consiste a remplacer...

28
Compression – m´ ethode de Huffman Thierry Lecroq Universit´ e de Rouen FRANCE

Upload: lekhanh

Post on 16-Sep-2018

223 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Compression { m ethode de Hu manlecroq/cours/huff.pdf · La m ethode de Hu man consiste a remplacer les caract eres les plus fr equents par des codes courts et les caract eres les

Compression – methode de Huffman

Thierry Lecroq

Universite de RouenFRANCE

Page 2: Compression { m ethode de Hu manlecroq/cours/huff.pdf · La m ethode de Hu man consiste a remplacer les caract eres les plus fr equents par des codes courts et les caract eres les

La methode de Huffman

consiste a remplacer les caracteres les plus frequents par des codescourts et les caracteres les moins frequents par des codes longs

utilise la notion de code prefixe

Thierry Lecroq (Univ. Rouen) Huffman 2 / 24

Page 3: Compression { m ethode de Hu manlecroq/cours/huff.pdf · La m ethode de Hu man consiste a remplacer les caract eres les plus fr equents par des codes courts et les caract eres les

Code prefixe

Un code prefixe est un ensemble de mots tel qu’aucun mot del’ensemble n’est prefixe d’un autre mot de l’ensemble

Le decodage est alors immediat

Un code prefixe sur l’alphabet binaire {0, 1} peut etre represente parun trie qui est un fait un arbre binaire ou tous les nœuds internes ontexactement deux successeurs

Thierry Lecroq (Univ. Rouen) Huffman 3 / 24

Page 4: Compression { m ethode de Hu manlecroq/cours/huff.pdf · La m ethode de Hu man consiste a remplacer les caract eres les plus fr equents par des codes courts et les caract eres les

Arbre

Les feuilles sont etiquetees avec les caracteres originaux, les branchespar 0 ou 1 et les chemins depuis la racine jusqu’aux feuilles epellentles codes des caracteres originaux

L’utilisation d’un code prefixe assure que les codes sont bienrepresentes par les feuilles

Par convention, le fils gauche d’un nœud est etiquete par 0 et le fils droitpar 1

Thierry Lecroq (Univ. Rouen) Huffman 4 / 24

Page 5: Compression { m ethode de Hu manlecroq/cours/huff.pdf · La m ethode de Hu man consiste a remplacer les caract eres les plus fr equents par des codes courts et les caract eres les

Encodage

La phase d’encodage se compose de trois etapes :

1 comptage des frequences des caracteres

2 construction du code prefixe

3 codage du texte

Thierry Lecroq (Univ. Rouen) Huffman 5 / 24

Page 6: Compression { m ethode de Hu manlecroq/cours/huff.pdf · La m ethode de Hu man consiste a remplacer les caract eres les plus fr equents par des codes courts et les caract eres les

Exemple

fentree contientcagataagagaa

12× 8 = 96 bitsles frequences sont

a c g t FINfreq 7 1 3 1 1

Thierry Lecroq (Univ. Rouen) Huffman 6 / 24

Page 7: Compression { m ethode de Hu manlecroq/cours/huff.pdf · La m ethode de Hu man consiste a remplacer les caract eres les plus fr equents par des codes courts et les caract eres les

Exemple cagataagagaa

1 1 1 3 7

c t FIN g a

Thierry Lecroq (Univ. Rouen) Huffman 7 / 24

Page 8: Compression { m ethode de Hu manlecroq/cours/huff.pdf · La m ethode de Hu man consiste a remplacer les caract eres les plus fr equents par des codes courts et les caract eres les

Exemple cagataagagaa

1 3 7

FIN g a

2

1 1

c t

Thierry Lecroq (Univ. Rouen) Huffman 7 / 24

Page 9: Compression { m ethode de Hu manlecroq/cours/huff.pdf · La m ethode de Hu man consiste a remplacer les caract eres les plus fr equents par des codes courts et les caract eres les

Exemple cagataagagaa

3 7

g a

3

12

1 1

c t

FIN

Thierry Lecroq (Univ. Rouen) Huffman 7 / 24

Page 10: Compression { m ethode de Hu manlecroq/cours/huff.pdf · La m ethode de Hu man consiste a remplacer les caract eres les plus fr equents par des codes courts et les caract eres les

Exemple cagataagagaa

7

a

6

33

12

1 1

c t

FIN

g

Thierry Lecroq (Univ. Rouen) Huffman 7 / 24

Page 11: Compression { m ethode de Hu manlecroq/cours/huff.pdf · La m ethode de Hu man consiste a remplacer les caract eres les plus fr equents par des codes courts et les caract eres les

Exemple cagataagagaa

13

76

33

12

1 1

c t

FIN

g

a

10

10

10

0 1

Thierry Lecroq (Univ. Rouen) Huffman 7 / 24

Page 12: Compression { m ethode de Hu manlecroq/cours/huff.pdf · La m ethode de Hu man consiste a remplacer les caract eres les plus fr equents par des codes courts et les caract eres les

Exemple cagataagagaa

a c g t FINcode 1 0000 01 0001 001

codage de l’arbre :00001 binaire(c, 9) 1 binaire(t, 9) 1 binaire(FIN, 9) 1 binaire(g, 9) 1binaire(a, 9)

en ASCII :00001 001000011 1 001010100 1 100000000 1 001000111 1001000001

54 bits

Thierry Lecroq (Univ. Rouen) Huffman 8 / 24

Page 13: Compression { m ethode de Hu manlecroq/cours/huff.pdf · La m ethode de Hu man consiste a remplacer les caract eres les plus fr equents par des codes courts et les caract eres les

Exemple cagataagagaa

codage du texte : 0000 1 01 1 0001 1 1 01 1 01 1 1 001

24 bits

total

78 bits

Thierry Lecroq (Univ. Rouen) Huffman 9 / 24

Page 14: Compression { m ethode de Hu manlecroq/cours/huff.pdf · La m ethode de Hu man consiste a remplacer les caract eres les plus fr equents par des codes courts et les caract eres les

Comptage des frequences de caracteres

Compte(fentree)

1 pour a ∈ A faire2 freq(a)← 03 tantque non fdf(fentree) et a est le prochain caractere faire4 freq(a)← freq(a) + 15 freq(FIN)← 1

Thierry Lecroq (Univ. Rouen) Huffman 10 / 24

Page 15: Compression { m ethode de Hu manlecroq/cours/huff.pdf · La m ethode de Hu man consiste a remplacer les caract eres les plus fr equents par des codes courts et les caract eres les

Construction du code prefixe

Utilisation de freq(a) pour chaque a ∈ A

Const-arbre0()

1 creer un arbre ta a un nœud pour chaquea ∈ A avec poids(a) = freq(a)2 i← 03 repeter4 extraire les 2 arbres de poids plus faible t1 et t25 creer un arbre t avec t1 et t2 comme sous-arbre6 poids(t)← poids(t1) + poids(t2)7 jusqu’a il ne reste qu’1 seul arbre

Thierry Lecroq (Univ. Rouen) Huffman 11 / 24

Page 16: Compression { m ethode de Hu manlecroq/cours/huff.pdf · La m ethode de Hu man consiste a remplacer les caract eres les plus fr equents par des codes courts et les caract eres les

AlgorithmesConst-arbre()

1 pour a ∈ A ∪ {FIN} faire2 si freq(a) 6= 0 alors3 creer un nœud t4 poids(t)← freq(a)5 etiq(t)← a6 lfeuilles← liste des nœuds dans l’ordre croissant des poids7 larbres← liste vide8 tantque Longueur(lfeuilles) + Longueur(larbres) > 1 faire9 (g, d)← extraire les 2 nœuds de plus faible poids parmi

les 2 premiers elements de lfeuilles etles 2 premiers elements de larbres

10 creer un nœud t11 poids(t)← poids(g) + poids(d)12 gauche(t)← g13 droit(t)← d14 inserer t a la fin de larbres15 Retourner t

Thierry Lecroq (Univ. Rouen) Huffman 12 / 24

Page 17: Compression { m ethode de Hu manlecroq/cours/huff.pdf · La m ethode de Hu man consiste a remplacer les caract eres les plus fr equents par des codes courts et les caract eres les

Codes

Apres la construction de l’arbre il est possible de retrouver le code dechaque caractere par un parcours en profondeur de l’arbre.

Thierry Lecroq (Univ. Rouen) Huffman 13 / 24

Page 18: Compression { m ethode de Hu manlecroq/cours/huff.pdf · La m ethode de Hu man consiste a remplacer les caract eres les plus fr equents par des codes courts et les caract eres les

Algorithmes

Const-code(t, `)

1 si t n’est pas une feuille alors2 temp[`]← 03 Const-code(gauche(t), ` + 1)4 temp[`]← 15 Const-code(droit(t), ` + 1)6 sinon code(etiq(t))← temp[0 . . `− 1]

Thierry Lecroq (Univ. Rouen) Huffman 14 / 24

Page 19: Compression { m ethode de Hu manlecroq/cours/huff.pdf · La m ethode de Hu man consiste a remplacer les caract eres les plus fr equents par des codes courts et les caract eres les

Codage de l’arbre

La troisieme etape necessite de stocker les codes de chaque caractereavant le code du texte

Thierry Lecroq (Univ. Rouen) Huffman 15 / 24

Page 20: Compression { m ethode de Hu manlecroq/cours/huff.pdf · La m ethode de Hu man consiste a remplacer les caract eres les plus fr equents par des codes courts et les caract eres les

Algorithmes

Code-arbre(fsortie, t)

1 si t n’est pas une feuille alors2 ecrire un 0 dans fsortie3 Code-arbre(fsortie, gauche(t))4 Code-arbre(fsortie, droit(t))5 sinon ecrire un 1 dans fsortie6 ecrire binaire(etiq(t)) dans fsortie

Thierry Lecroq (Univ. Rouen) Huffman 16 / 24

Page 21: Compression { m ethode de Hu manlecroq/cours/huff.pdf · La m ethode de Hu man consiste a remplacer les caract eres les plus fr equents par des codes courts et les caract eres les

Codage du texte

On peut ensuite coder le texte

Thierry Lecroq (Univ. Rouen) Huffman 17 / 24

Page 22: Compression { m ethode de Hu manlecroq/cours/huff.pdf · La m ethode de Hu man consiste a remplacer les caract eres les plus fr equents par des codes courts et les caract eres les

Algorithmes

Code-texte(fentree, fsortie)

1 tantque non fdf(fentree) et a est le prochain caractere faire2 ecrire code(a) dans fsortie3 ecrire code(FIN) dans fsortie

Thierry Lecroq (Univ. Rouen) Huffman 18 / 24

Page 23: Compression { m ethode de Hu manlecroq/cours/huff.pdf · La m ethode de Hu man consiste a remplacer les caract eres les plus fr equents par des codes courts et les caract eres les

Encodage complet

On peut maintenant ecrire l’algorithme d’encodage complet

Thierry Lecroq (Univ. Rouen) Huffman 19 / 24

Page 24: Compression { m ethode de Hu manlecroq/cours/huff.pdf · La m ethode de Hu man consiste a remplacer les caract eres les plus fr equents par des codes courts et les caract eres les

Algorithmes

Encodage(fentree, fsortie)

1 Compte(fentree)2 t← Const-arbre()3 Const-code(t, 0)4 Code-arbre(fsortie, t)5 Code-texte(fentree, fsortie)

Thierry Lecroq (Univ. Rouen) Huffman 20 / 24

Page 25: Compression { m ethode de Hu manlecroq/cours/huff.pdf · La m ethode de Hu man consiste a remplacer les caract eres les plus fr equents par des codes courts et les caract eres les

Decodage

Immediat

lecture de l’entete et reconstruction de l’arbre

decodage du texte

Thierry Lecroq (Univ. Rouen) Huffman 21 / 24

Page 26: Compression { m ethode de Hu manlecroq/cours/huff.pdf · La m ethode de Hu man consiste a remplacer les caract eres les plus fr equents par des codes courts et les caract eres les

Algorithmes

Reconst-arbre(fentree, t)

1 b← lire 1 bit de fentree2 si b = 1 alors

. feuille3 gauche(t)← nil4 droit(t)← nil5 etiq(t)← symbole correspondants aux 9 prochains bits de fentree6 sinon creer un nœud g7 gauche(t)← g8 Reconst-arbre(fentree, g)9 creer un nœud d

10 droit(t)← d11 Reconst-arbre(fentree, d)

Thierry Lecroq (Univ. Rouen) Huffman 22 / 24

Page 27: Compression { m ethode de Hu manlecroq/cours/huff.pdf · La m ethode de Hu man consiste a remplacer les caract eres les plus fr equents par des codes courts et les caract eres les

Algorithmes

Decode-texte(fentree, fsortie, racine)

1 t← racine2 tantque etiq(t) 6= FIN faire3 si t est une feuille alors4 ecrire etiq(t) dans fsortie5 t← racine6 sinon b← lire 1 bit de fentree7 si b = 0 alors8 t← gauche(t)9 sinon t← droit(t)

Thierry Lecroq (Univ. Rouen) Huffman 23 / 24

Page 28: Compression { m ethode de Hu manlecroq/cours/huff.pdf · La m ethode de Hu man consiste a remplacer les caract eres les plus fr equents par des codes courts et les caract eres les

Decodage complet

Encodage(fentree, fsortie)

1 creer un nœud racine2 Reconst-arbre(fentree, racine)3 Decode-texte(fentree, fsortie, racine)

Thierry Lecroq (Univ. Rouen) Huffman 24 / 24