10.07.2015 Views

Arbres AVL - exemple - UQAC

Arbres AVL - exemple - UQAC

Arbres AVL - exemple - UQAC

SHOW MORE
SHOW LESS
  • No tags were found...

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

1<strong>Arbres</strong> équilibrés :les arbres <strong>AVL</strong>Thursday, 4 October, 12


<strong>Arbres</strong> équilibrés – concepts de base• Situation idéale visée: s’assurer que le sous-arbrede gauche et le sous-arbre de droite sont de mêmehauteur• Ce principe s’appliquerait à tous les nœuds demanière récursive• Si on appliquait ceci à chaque insertion ou retrait,ce serait très coûteux• Il faut donc établir des conditions plus faibles, maisqui nous assurent des gains en performanceThursday, 4 October, 123


Les arbres <strong>AVL</strong>• <strong>AVL</strong> = Adelson Velskii Landis• Arbre binaire de recherche avec contrainte debalancement (équilibré)▫ arbre de recherche binaire tel que pour chaque nœud,les hauteurs des ses sous-arbres gauche et droite sontdifférentes d’au plus 1• Permet de garantir des temps d’accès O(log n)• Premier arbre équilibré inventé (1962)Thursday, 4 October, 124


<strong>Arbres</strong> <strong>AVL</strong> - <strong>exemple</strong>*-Thursday, 4 October, 126


<strong>Arbres</strong> <strong>AVL</strong> - <strong>exemple</strong>128164 101426Cet arbre est un arbre <strong>AVL</strong>Thursday, 4 October, 127


<strong>Arbres</strong> <strong>AVL</strong> – <strong>exemple</strong>Ces noeuds violentla condition128164 1014261Thursday, 4 October, 12Après l’ajout de 1 ce n’est plus un arbre <strong>AVL</strong>8


<strong>Arbres</strong> <strong>AVL</strong> - <strong>exemple</strong>128164 101426 13Thursday, 4 October, 12Après l’ajout de 13 ce n’est plus un arbre <strong>AVL</strong>9


Analyse• Soit NB le nombre de nœuds minimum dans unarbre <strong>AVL</strong> de hauteur H• NB 0 = 0 , NB 1 = 1 et NB 2 = 2• NB h = NB H-1 + NB h-2 + 1 pour h ≥ 2• NB h = F h+3 -1 (Fibonacci) (preuve ???)Thursday, 4 October, 1210


AnalyseThursday, 4 October, 1211


Opérations de base• Suppression :▫ Similaire à un arbre binaire de recherche toutefois: peut entraîner un rééquilibrage le rééquilibrage peut entraîner des rééquilibrage encascade ⇒ faut connaître la totalité du chemin parcouruThursday, 4 October, 1213


Rééquilibrage• Soit A un nœud d’un arbre <strong>AVL</strong>, on veut insérerun nouveau nœud dans le sous-arbre gauche :▫ La hauteur du sous-arbre gauche n'augmente pas,l'arbre était équilibré par hypothèse, donc il le reste▫ La hauteur du sous-arbre gauche augmente. Troiscas de figure : La hauteur du sous-arbre gauche était égale à lahauteur du sous-arbre droit moins un. La hauteur du sous-arbre gauche était égale à lahauteur du sous-arbre droit, l'arbre reste équilibré La hauteur du sous-arbre gauche était égale à lahauteur du sous arbre droit plus 1 ; après l'insertion,l’arbre devient déséquilibré.Thursday, 4 October, 1215


Rééquilibrage• Dans le cas d’insertion dans le sous-arbre degauche du fils gauche ou dans le sous-arbre dedroite du fils droit:⇒ Simple rotation• Dans le cas d’insertion dans le sous-arbre dedroite du fils gauche ou dans le sous-arbre degauche du fils droit:⇒ Double rotationThursday, 4 October, 1216


Exemple : hauteur du sous-arbre gaucheaugmente mais l’arbre reste équilibréThursday, 4 October, 1217


Exemple• Cas où l’arbre penche à gauche• Après rééquilibrageThursday, 4 October, 1218


Exemple• Cas où l’arbre penche à droite• Après rééquilibrageThursday, 4 October, 1219


Rotation simple*ABBCDADEECThursday, 4 October, 1220


Rotation simpletemplate void BSTleft;x->left = y->right;y->right = x;x = y;}*ABBCDADEECThursday, 4 October, 1221


Exemple de simple rotation12816Hauteur = 24 101426Hauteur = 01Thursday, 4 October, 1222


Exemple de simple rotation128 16410142 61Thursday, 4 October, 1223


Exemple de simple rotation1241628141610Thursday, 4 October, 1224


Exemple de simple rotation1241628141610Thursday, 4 October, 1225


Rotation double*AEBCBADEDFGCFGThursday, 4 October, 1226


Rotation doubletemplate void BSTleft );rotation_filsG( x );}*AEBCBADEDFGCFGThursday, 4 October, 1227


<strong>AVL</strong> – <strong>exemple</strong> de double rotation128164101426Noeud inséré7Thursday, 4 October, 1228


<strong>AVL</strong> – <strong>exemple</strong> de double rotation1281641014267Thursday, 4 October, 1229


<strong>AVL</strong> – <strong>exemple</strong> de double rotation1281661014472Thursday, 4 October, 1230


<strong>AVL</strong> – <strong>exemple</strong> de double rotation1281661014472Thursday, 4 October, 1231


<strong>AVL</strong> – <strong>exemple</strong> de double rotation1261648142710Thursday, 4 October, 1232


Exemple• On cherche à insérer la séquence suivante dansun arbre <strong>AVL</strong> :▫ 17, 9, 10, 3, 5, 2, 8179 17910 17910Rotationdouble109 1733109 17Thursday, 4 October, 1233


Exemple105 10Rotationdouble10210Rotationsimple9 179 17517517333 93 95258 531031029 1729 178Thursday, 4 October, 1234


Autre <strong>exemple</strong>2 10 12 4 16 8 6 1420Thursday, 4 October, 1235


Autre <strong>exemple</strong>2 10 12 4 16 8 6 142-110 0Thursday, 4 October, 1236


Autre <strong>exemple</strong>2 10 12 4 16 8 6 142-210-112 0Thursday, 4 October, 1237


Autre <strong>exemple</strong>2 10 12 4 16 8 6 1410020120Rotation simpleThursday, 4 October, 1238


Autre <strong>exemple</strong>2 10 12 4 16 8 6 14101212-1 04 0Thursday, 4 October, 1239


Autre <strong>exemple</strong>2 10 12 4 16 8 6 141002-112-14 0 16 0Thursday, 4 October, 1240


Autre <strong>exemple</strong>2 10 12 4 16 8 6 141012-212-1-14 1608 0Thursday, 4 October, 1241


Autre <strong>exemple</strong>2 10 12 4 16 8 6 141004012-128 160 0 0Rotation simpleThursday, 4 October, 1242


Autre <strong>exemple</strong>2 10 12 4 16 8 6 141014-112-1028 1 1606 0Thursday, 4 October, 1243


Autre <strong>exemple</strong>2 10 12 4 16 8 6 141004-112-2028 1 1616 0 14 0Thursday, 4 October, 1244


Autre <strong>exemple</strong>2 10 12 4 16 8 6 141014-1140028 1 12 160060Rotation doubleThursday, 4 October, 1245


Autre <strong>exemple</strong>Voici un <strong>exemple</strong> où la rotation se fait loin du point d’insertion1024-1140128 1 12 1600160 -1 9 070Noeud inséréThursday, 4 October, 1246


Autre <strong>exemple</strong>Voici un <strong>exemple</strong> où la rotation se fait loin du point d’insertion804010-112 6-1901400170120160Après rotation doubleThursday, 4 October, 1247


Exemple : retrait62318312 4571955 18 39 519914Retrait de 62!Thursday, 4 October, 1248


Limitations• Il faut stocker l’information concernant lahauteur dans les nœuds• Le processus récursif implique de remonterjusqu’à la racine• Le retrait est passablement plus compliqué quel’insertion (mais demeure O(lg N))• En pratique, il existe des approches plus rapidesThursday, 4 October, 1249

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!