• Aucun résultat trouvé

Compression – m´ethode de Huffman

N/A
N/A
Protected

Academic year: 2022

Partager "Compression – m´ethode de Huffman"

Copied!
28
0
0

Texte intégral

(1)

Universit´e de Rouen FRANCE

(2)

consiste `a remplacer les caract`eres les plus fr´equents par des codes courts et les caract`eres les moins fr´equents par des codes longs utilise la notion de code pr´efixe

(3)

Un code pr´efixe est un ensemble de mots tel qu’aucun mot de l’ensemble n’est pr´efixe d’un autre mot de l’ensemble

Le d´ecodage est alors imm´ediat

Un code pr´efixe sur l’alphabet binaire{0,1} peut ˆetre repr´esent´e par untrie qui est un fait un arbre binaire o`u tous les nœuds internes ont exactement deux successeurs

Thierry Lecroq (Univ. Rouen) Huffman 3 / 24

(4)

Les feuilles sont ´etiquet´ees avec les caract`eres originaux, les branches par 0 ou 1 et les chemins depuis la racine jusqu’aux feuilles ´epellent les codes des caract`eres originaux

L’utilisation d’un code pr´efixe assure que les codes sont bien repr´esent´es par les feuilles

Par convention, le fils gauche d’un nœud est ´etiquet´e par 0 et le fils droit par 1

(5)

La phase d’encodage se compose de trois ´etapes :

1 comptage des fr´equences des caract`eres

2 construction du code pr´efixe

3 codage du texte

Thierry Lecroq (Univ. Rouen) Huffman 5 / 24

(6)

cagataagagaa 12×8 = 96 bits

les fr´equences sont

a c g t FIN

fr´eq 7 1 3 1 1

(7)

1 1 1 3 7

c t FIN g a

Thierry Lecroq (Univ. Rouen) Huffman 7 / 24

(8)

1 3 7

FIN g a

2

1 1

c t

(9)

3 7

g a

3

1 2

1 1

c t

FIN

Thierry Lecroq (Univ. Rouen) Huffman 7 / 24

(10)

7 a 6

3 3

1 2

1 1

c t

FIN

g

(11)

13

7 6

3 3

1 2

1 1

c t

FIN

g

a

1 0

1 0

1 0

0 1

Thierry Lecroq (Univ. Rouen) Huffman 7 / 24

(12)

a c g t FIN code 1 0000 01 0001 001 codage de l’arbre :

00001 binaire(c, 9)1binaire(t, 9)1binaire(FIN, 9)1binaire(g, 9)1 binaire(a, 9)

en ASCII :

00001 001000011 1 001010100 1 100000000 1 001000111 1 001000001

54 bits

(13)

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

(14)

Compte(fentr´ee)

1 poura∈A faire 2 fr´eq(a)←0

3 tantque non fdf(fentr´ee) etaest le prochain caract`erefaire 4 fr´eq(a)←fr´eq(a) + 1

5 fr´eq(FIN)←1

(15)

Const-arbre0()

1 cr´eer un arbreta`a un nœud pour chaquea∈A avecpoids(a) =fr´eq(a) 2 i←0

3 r´ep´eter

4 extraire les 2 arbres de poids plus faible t1 et t2 5 cr´eer un arbret avect1 ett2 comme sous-arbre 6 poids(t)←poids(t1) +poids(t2)

7 jusqu’`ail ne reste qu’1 seul arbre

Thierry Lecroq (Univ. Rouen) Huffman 11 / 24

(16)

1 pouraA∪ {FIN} faire 2 sifr´eq(a)6= 0alors 3 cr´eer un nœudt 4 poids(t)fr´eq(a) 5 ´etiq(t)a

6 lfeuillesliste des nœuds dans l’ordre croissant des poids 7 larbresliste vide

8 tantqueLongueur(lfeuilles)+Longueur(larbres)>1 faire 9 (g, d)extraire les 2 nœuds de plus faible poids parmi

les 2 premiers ´el´ements delfeuilleset les 2 premiers ´el´ements delarbres 10 cr´eer un nœudt

11 poids(t)poids(g) +poids(d) 12 gauche(t)g

13 droit(t)d

14 ins´erer t`a la fin delarbres

(17)

Apr`es la construction de l’arbre il est possible de retrouver le code de chaque caract`ere par un parcours en profondeur de l’arbre.

Thierry Lecroq (Univ. Rouen) Huffman 13 / 24

(18)

Const-code(t, `)

1 sit n’est pas une feuillealors 2 temp[`]←0

3 Const-code(gauche(t), `+ 1) 4 temp[`]←1

5 Const-code(droit(t), `+ 1) 6 sinon code(´etiq(t))←temp[0. . `−1]

(19)

La troisi`eme ´etape n´ecessite de stocker les codes de chaque caract`ere avant le code du texte

Thierry Lecroq (Univ. Rouen) Huffman 15 / 24

(20)

Code-arbre(fsortie, t)

1 sit n’est pas une feuillealors 2 ´ecrire un 0dansfsortie

3 Code-arbre(fsortie,gauche(t)) 4 Code-arbre(fsortie,droit(t)) 5 sinon´ecrire un1dans fsortie

6 ´ecrire binaire(´etiq(t))dans fsortie

(21)

On peut ensuite coder le texte

Thierry Lecroq (Univ. Rouen) Huffman 17 / 24

(22)

Code-texte(fentr´ee,fsortie)

1 tantque non fdf(fentr´ee) etaest le prochain caract`erefaire 2 ´ecrire code(a) dans fsortie

3 ´ecrirecode(FIN) dansfsortie

(23)

On peut maintenant ´ecrire l’algorithme d’encodage complet

Thierry Lecroq (Univ. Rouen) Huffman 19 / 24

(24)

Encodage(fentr´ee,fsortie)

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

(25)

Imm´ediat

lecture de l’entˆete et reconstruction de l’arbre d´ecodage du texte

Thierry Lecroq (Univ. Rouen) Huffman 21 / 24

(26)

1 b←lire 1 bit defentr´ee 2 si b=1alors

.feuille

3 gauche(t)←nil 4 droit(t)←nil

5 ´etiq(t)←symbole correspondants aux 9 prochains bits de fentr´ee 6 sinon cr´eer un nœudg

7 gauche(t)←g

8 Reconst-arbre(fentr´ee, g) 9 cr´eer un nœudd

10 droit(t)←d

11 Reconst-arbre(fentr´ee, d)

(27)

1 t←racine

2 tantque´etiq(t)6=FINfaire 3 si test une feuille alors 4 ´ecrire´etiq(t) dansfsortie 5 t←racine

6 sinon b←lire 1 bit defentr´ee 7 sib=0alors

8 t←gauche(t)

9 sinon t←droit(t)

Thierry Lecroq (Univ. Rouen) Huffman 23 / 24

(28)

Encodage(fentr´ee,fsortie) 1 cr´eer un nœudracine

2 Reconst-arbre(fentr´ee,racine) 3 D´ecode-texte(fentr´ee,fsortie,racine)

Références

Documents relatifs

Le mˆ eme signal num´ erique attaque les canaux de modulation externes de deux synth´ etiseurs radiofr´ equences ´ emettant des porteuses de fr´ equence diff´ erentes : est-on

Compl´eter le programme pour d´eterminer le nombre de caract`eres de chacun des mots contenus dans ce texte. D`es que la longueur d’un mot est connue, affichez en

1) Pour qu’un entier a quelconque soit r´ esidu quadratique de p, il faut et il suffit que a soit congru ` a l’un des entiers. 1 2 , 2

Exercice 4 : cryptage Ecrire un programme qui demande ` a l’utilisateur de saisir 26 lettres pour chiffrer les 26 lettres de l’alphabet (et v´ erifie qu’il ne rentre pas deux fois

Syntaxe de l’adressage indirect par registre.- Comme nous l’avons d´ej` a vu, pour d´esigner une valeur constante on ´ecrit cette valeur (en hexad´ecimal), pour une valeur se

Syntaxe de l’adressage indirect par registre en langage symbolique.- Comme nous l’avons d´ej` a vu, en langage symbolique, pour d´esigner une constante on ´ecrit celle-ci

Maintenant qu’on a compris ce qu’on peut gagner ` a mettre toutes les formules ` a droite des s´ equents, essayons de regagner un peu de ce qu’on a perdu (en termes de lisibilit´

imprime toutes les lignes contenant le mot analyse suivi du mot lexical dans tous les fichiers de suffixe .tex. (L’option -i