0% ont trouvé ce document utile (0 vote)
10 vues33 pages

Arbres AVL : Équilibrage et Recherche

Ce document décrit la compression de données sans perte à l'aide du codage de Huffman. Il explique les principes de base de cette méthode de codage statistique où les symboles les plus fréquents reçoivent les codes les plus courts. Un exemple détaillé illustre la construction de l'arbre de codage et l'attribution des codes binaires aux symboles.

Transféré par

Ahmed Riahy
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
10 vues33 pages

Arbres AVL : Équilibrage et Recherche

Ce document décrit la compression de données sans perte à l'aide du codage de Huffman. Il explique les principes de base de cette méthode de codage statistique où les symboles les plus fréquents reçoivent les codes les plus courts. Un exemple détaillé illustre la construction de l'arbre de codage et l'attribution des codes binaires aux symboles.

Transféré par

Ahmed Riahy
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Cours 5 : Les arbres AVL

Arbres binaires équilibrés


Rappel sur les arbres binaires
de recherche
« Ordre » sur les nœuds :
• Les plus petits à gauche
• Les plus grands à droite

Pour accélérer les recherches d’un


élément dans l’arbre
Objectif : dichotomie (on ne parcourt que
la moitié de l’arbre)

2013-2014 Algorithmique 2
Exemple
3

2 9

1 6 11

8
Si on cherche 7
• 3 < 7 : pas besoin de chercher dans le sous-arbre
gauche
Algorithmique 3
Exemple (2)
3

2 9

1 6 11

8
• 7 < 9 : pas besoin de chercher dans le sous-arbre
droit

2013-2014 Algorithmique 4
Exemple (3)
3

2 9

1 6 11

8
• 6 < 7 : on cherche a droit

2013-2014 Algorithmique 5
Exemple (4)
3

2 9

1 6 11

8
• 7 < 8 et le nœud 8 n’a pas de sous-arbres donc la
recherche a échoué

2013-2014 Algorithmique 6
Rappel sur les ABR (suite)
En général, la recherche dans un ABR
coute Θ(h), où h est l’hauteur de l’arbre
La hauteur minimale pour un arbre binaire
avec n nœuds est log(n)
Donc dans le meilleur de cas, le cout de la
recherche dans un ABR est log(n) où n est
le nombre des nœuds de l’arbre

2013-2014 Algorithmique 7
Problème
1

Est un ABR n

2013-2014 Algorithmique 8
Identification du problème
On ne gagne rien au niveau de la
recherche
• On est obligé de chercher dans le s.-a. droit
• Recherche en Θ(n) forcément

Solution
• Obliger l’arbre à être relativement symétrique
• Hauteur du s.-a. gauche proche de la hauteur
du s.-a. droit
2013-2014 Algorithmique 9
Arbres AVL
Arbres de recherche équilibrés
Principe :
• Pour chaque nœud, les hauteurs du s.-a. gauche et
du s.-a. droit différent au plus de 1
Modèle proposé par G.M. Adelson-Velsky et
E.M. Landis (d’où son nom)
Notion de facteur d'équilibrage d'un nœud
• Différence entre les hauteurs des sag et sad
• Un arbre est AVL si tous les nœuds ont un facteur de
-1, 0 ou 1
2013-2014 Algorithmique 10
Exemple
50

17 72

12 23 54 76

9 14 19 67

2013-2014 Algorithmique 11
Les changements
Cette fois, on a systématiquement la
moitié, ou près de la moitié de l’arbre de
chaque côté de la racine
Et ceci pour tous les nœuds
Chaque choix entre s.-a. gauche et s.-a.
droit élimine la moitié des nœuds restants
On a un vrai parcours dichotomique
Complexité Θ(log(n)) dans le pire des cas
2013-2014 Algorithmique 12
Implémentation habituelle
Rajouter un attribut a l’arbre
• Sa profondeur
ou
• Son facteur d’équilibrage

A mettre a jour à chaque modification


(ajout ou suppression)

2013-2014 Algorithmique 13
Problématique de l’ajout
On ajoute un élément
L’arbre (ou un de ses sous-arbres) peut
devenir déséquilibré
• Facteur < -1 ou >1
Principe :
• On fait l’ajout normalement
• On remonte en mettant les profondeurs ou
facteurs à jour jusqu'à rencontrer un arbre
déséquilibré
2013-2014 Algorithmique 14
Problématique de l’ajout (2)
Si on ne rencontre aucun arbre
déséquilibré, parfait
Sinon, on rééquilibre le premier arbre qui
devient déséquilibré lors de la remontée
• Il redevient équilibré
• Avec la même profondeur qu’avant l’ajout
• Donc inutile de remonter davantage

2013-2014 Algorithmique 15
Le rééquilibrage
Un principe : la rotation
En fait, selon le facteur de déséquilibrage
de l’arbre et celui de ses sous-arbres, on
va devoir faire une ou deux rotations (je ne
detaille pas)
Deux actions
• Rotation à gauche
• Rotation à droite

2013-2014 Algorithmique 16
La rotation à droite

b a

a b
r. d.
W U

U V V W

2013-2014 Algorithmique 17
La rotation à gauche

a b

b a
r. g.
U W

V W U V

2013-2014 Algorithmique 18
La double rotation à gauche

a c

b a b
d. r. g.
c

Z U V W Z

V W
19
La compression de données

Principes
Exemples
Codage de Huffmann
La compression de données
La compression de données traite de la manière dont
on peut réduire l’espace nécessaire à la
représentation d’une certaine quantité d’information
Deux grandes catégories
• Sans perte
• Avec perte
Manipulée dans tous les secteurs
• Données quelconques : zip, rar, gz
• Graphiques : gif, png, jpg
• Audio : wav, mp3, ogg
• Video : mpeg2, mpeg4, xvid, mkv
2013-2014 Algorithmique 21
Compression sans perte
Codage de Huffmann
• Plus un symbole apparaît, plus son codage est court
Codage RLE (Run-Length Encoding)
• abab remplacé par 2ab
Codage LZW (Lempel-Ziv-Welch)(→GIF)
• De type « dictionnaire »
• Des successions de caractères se retrouvent plus
souvent que d'autres
• On peut donc les remplacer par un nouveau caractère

2013-2014 Algorithmique 22
Compression avec pertes
Idée : seule une partie des données est
utile
On ne garde que celles-là
Trois grands types
• Transformée de Fourier (DCT) : jpeg
• Compression par ondelettes
• Compression fractale

2013-2014 Algorithmique 23
Le codage de Huffmann
Codage de type statistique, analogue au
morse
Idée :
• Plus un symbole (ici un caractère) revient
souvent, plus son code sera court
On commence par lire le texte et compter
le nombre d’occurences de chaque
caractère
Le reste est à base d’arbres binaires
2013-2014 Algorithmique 24
Construction de l’arbre de
codage
Au départ
• Chaque caractère est racine d’un arbre dont
la valeur associée est le nombre
d’occurences du caractère
• On dispose d'un tableau d'arbres (ou autre
structure)
• De préférence trié par valeur

2013-2014 Algorithmique 25
Construction de l’arbre de
codage (2)
On va systématiquement « fusionner » les
deux arbres de coût minimal
• On obtient un arbre dont les s.-a. sont les
deux arbres de départ
• La plus petite valeur à gauche
• La valeur de l’arbre fusionné est la somme
des valeurs des deux arbres de départ
On supprime les deux arbres du tableau et
on ajoute l’arbre fusionné
2013-2014 Algorithmique 26
Exemple

13 15 20 50 20 28 50
a b c d c d
a b

98 48 50
d
d c
c a b
a b
2013-2014 Algorithmique 27
Construction de l’arbre de
codage (3)
On continue jusqu’à ce qu’il n’y ait plus
qu’un seul arbre dans le tableau

On a construit l’arbre en « montant »

On va le « redescendre » pour construire


les codes

2013-2014 Algorithmique 28
Construction des codes
Code = mot binaire (des 0 et des 1)
Principe :
• Quand on descend à droite, on ajoute 1 en fin
de mot
• Quand on descend à gauche, on ajoute 0 en
fin de mot
• (Parfaitement arbitraire, on pourrait faire
l’inverse)

2013-2014 Algorithmique 29
Reprenons l’exemple

13 15 20 50
a b c d d
c
a b

Le code de d est 1
Le code de c est 00
Le code de a est 010
Le code de b est 011

2013-2014 Algorithmique 30
Astuce du code
Le préfixe d’un code ne peut pas être un
code
• Si 1001 est un code, 1,10 et 100 ne peuvent
pas être des codes
Conséquence :
• Pas de confusion possible
• Code parfaitement déterministe

2013-2014 Algorithmique 31
Le fichier codé
Représentation de l’arbre
• Il faut choisir une façon simple d’enregistrer
l’arbre
Le texte codé
• Chaque lettre est remplacée par son code

2013-2014 Algorithmique 32
Décodage
On recrée l’arbre
On part de la racine :
• Si 0, on descend à gauche
• Si 1, on descend à droite
• Si on tombe sur une feuille
• Étiquetée par un caractère
• On écrit le caractère et on repart de la racine

2013-2014 Algorithmique 33

Vous aimerez peut-être aussi