You are on page 1of 28

Compression m ethode de Human

Thierry Lecroq
Universit e de Rouen FRANCE

La m ethode de Human

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 exe

Thierry Lecroq (Univ. Rouen)

Human

2 / 24

Code pr exe

Un code pr exe est un ensemble de mots tel quaucun mot de lensemble nest pr exe dun autre mot de lensemble Le d ecodage est alors imm ediat Un code pr exe sur lalphabet binaire {0, 1} peut etre repr esent e par un trie qui est un fait un arbre binaire o` u tous les nuds internes ont exactement deux successeurs

Thierry Lecroq (Univ. Rouen)

Human

3 / 24

Arbre

Les feuilles sont etiquet ees avec les caract` eres originaux, les branches par 0 ou 1 et les chemins depuis la racine jusquaux feuilles epellent les codes des caract` eres originaux Lutilisation dun code pr exe assure que les codes sont bien repr esent es par les feuilles Par convention, le ls gauche dun nud est etiquet e par 0 et le ls droit par 1

Thierry Lecroq (Univ. Rouen)

Human

4 / 24

Encodage

La phase dencodage se compose de trois etapes :


1 2 3

comptage des fr equences des caract` eres construction du code pr exe codage du texte

Thierry Lecroq (Univ. Rouen)

Human

5 / 24

Exemple fentr ee contient cagataagagaa 12 8 = 96 bits les fr equences sont a c g t fr eq 7 1 3 1

FIN 1

Thierry Lecroq (Univ. Rouen)

Human

6 / 24

Exemple cagataagagaa

1 c

1 t

1 FIN

3 g

7 a

Thierry Lecroq (Univ. Rouen)

Human

7 / 24

Exemple cagataagagaa

1 FIN

3 g

7 a

1 c

1 t

Thierry Lecroq (Univ. Rouen)

Human

7 / 24

Exemple cagataagagaa

3 g

7 a

1 FIN

1 c

1 t

Thierry Lecroq (Univ. Rouen)

Human

7 / 24

Exemple cagataagagaa

7 a

3 g

1 FIN

1 c

1 t

Thierry Lecroq (Univ. Rouen)

Human

7 / 24

Exemple cagataagagaa

13

0
6

1
7

0
3

1
3

0
2

1
1

0
1 c
Thierry Lecroq (Univ. Rouen)

1
1 t

FIN

Human

7 / 24

Exemple cagataagagaa
a 1 c 0000 g 01 t 0001 FIN 001

code

codage de larbre : 00001 binaire(c, 9) 1 binaire(t, 9) 1 binaire(FIN, 9) 1 binaire(g, 9) 1 binaire(a, 9) en ASCII : 00001 001000011 1 001010100 1 100000000 1 001000111 1 001000001 54 bits

Thierry Lecroq (Univ. Rouen)

Human

8 / 24

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)

Human

9 / 24

Comptage des fr equences de caract` eres

Compte(fentr ee)
1 pour a A faire 2 fr eq(a) 0 3 tantque non fdf(fentr ee ) et a est le prochain caract` ere faire 4 fr eq(a) fr eq(a) + 1 5 fr eq(FIN) 1

Thierry Lecroq (Univ. Rouen)

Human

10 / 24

Construction du code pr exe


Utilisation de fr eq(a) pour chaque a A Const-arbre0()
1 2 3 4 5 6 7

cr eer un arbre ta ` a un nud pour chaquea A avec poids(a) = fr eq(a) i0 r ep eter extraire les 2 arbres de poids plus faible t1 et t2 cr eer un arbre t avec t1 et t2 comme sous-arbre poids(t) poids(t1 ) + poids(t2 ) jusqu` a il ne reste qu1 seul arbre

Thierry Lecroq (Univ. Rouen)

Human

11 / 24

Algorithmes
Const-arbre() 1 2 3 4 5 6 7 8 9 pour a A {FIN} faire si fr eq(a) = 0 alors cr eer un nud t poids(t) fr eq(a) etiq(t) a lfeuilles liste des nuds dans lordre croissant des poids larbres liste vide tantque Longueur(lfeuilles) + Longueur(larbres) > 1 faire (g, d) extraire les 2 nuds de plus faible poids parmi les 2 premiers el ements de lfeuilles et les 2 premiers el ements de larbres cr eer un nud t poids(t) poids(g ) + poids(d) gauche(t) g droit(t) d ins erer t ` a la n de larbres Retourner t
Human 12 / 24

10 11 12 13 14 15

Thierry Lecroq (Univ. Rouen)

Codes

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

Thierry Lecroq (Univ. Rouen)

Human

13 / 24

Algorithmes

Const-code(t, )
1 si t nest pas une feuille alors 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]

Thierry Lecroq (Univ. Rouen)

Human

14 / 24

Codage de larbre

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

Thierry Lecroq (Univ. Rouen)

Human

15 / 24

Algorithmes

Code-arbre(fsortie, t)
1 si t nest pas une feuille alors 2 ecrire un 0 dans fsortie 3 Code-arbre(fsortie, gauche(t)) 4 Code-arbre(fsortie, droit(t)) 5 sinon ecrire un 1 dans fsortie 6 ecrire binaire( etiq(t)) dans fsortie

Thierry Lecroq (Univ. Rouen)

Human

16 / 24

Codage du texte

On peut ensuite coder le texte

Thierry Lecroq (Univ. Rouen)

Human

17 / 24

Algorithmes

Code-texte(fentr ee, fsortie)


1 tantque non fdf(fentr ee ) et a est le prochain caract` ere faire 2 ecrire code(a) dans fsortie 3 ecrire code(FIN) dans fsortie

Thierry Lecroq (Univ. Rouen)

Human

18 / 24

Encodage complet

On peut maintenant ecrire lalgorithme dencodage complet

Thierry Lecroq (Univ. Rouen)

Human

19 / 24

Algorithmes

Encodage(fentr ee, fsortie)


1 2 3 4 5

Compte(fentr ee) t Const-arbre() Const-code(t, 0) Code-arbre(fsortie, t) Code-texte(fentr ee, fsortie)

Thierry Lecroq (Univ. Rouen)

Human

20 / 24

D ecodage

Imm ediat lecture de lent ete et reconstruction de larbre d ecodage du texte

Thierry Lecroq (Univ. Rouen)

Human

21 / 24

Algorithmes
Reconst-arbre(fentr ee, t)
1 b lire 1 bit de fentr ee 2 si b = 1 alors 3 4 5 6 7 8 9 10 11

feuille gauche(t) nil droit(t) nil etiq(t) symbole correspondants aux 9 prochains bits de fentr ee sinon cr eer un nud g gauche(t) g Reconst-arbre(fentr ee, g ) cr eer un nud d droit(t) d Reconst-arbre(fentr ee, d)

Thierry Lecroq (Univ. Rouen)

Human

22 / 24

Algorithmes
D ecode-texte(fentr ee, fsortie, racine)
1 t racine 2 tantque etiq(t) = FIN faire 3 si t est une feuille alors 4 ecrire etiq(t) dans fsortie 5 t racine 6 sinon b lire 1 bit de fentr ee 7 si b = 0 alors 8 t gauche(t) 9 sinon t droit(t)

Thierry Lecroq (Univ. Rouen)

Human

23 / 24

D ecodage complet

Encodage(fentr ee, fsortie)


1 cr eer un nud racine 2 Reconst-arbre(fentr ee, racine) 3 Decode-texte(fentr ee, fsortie, racine)

Thierry Lecroq (Univ. Rouen)

Human

24 / 24

You might also like