Professional Documents
Culture Documents
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
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
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
Human
4 / 24
Encodage
comptage des fr equences des caract` eres construction du code pr exe codage du texte
Human
5 / 24
FIN 1
Human
6 / 24
Exemple cagataagagaa
1 c
1 t
1 FIN
3 g
7 a
Human
7 / 24
Exemple cagataagagaa
1 FIN
3 g
7 a
1 c
1 t
Human
7 / 24
Exemple cagataagagaa
3 g
7 a
1 FIN
1 c
1 t
Human
7 / 24
Exemple cagataagagaa
7 a
3 g
1 FIN
1 c
1 t
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
Human
8 / 24
Exemple cagataagagaa
Human
9 / 24
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
Human
10 / 24
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
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
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.
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]
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
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
Human
16 / 24
Codage du texte
Human
17 / 24
Algorithmes
Human
18 / 24
Encodage complet
Human
19 / 24
Algorithmes
Human
20 / 24
D ecodage
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)
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)
Human
23 / 24
D ecodage complet
Human
24 / 24