La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

INF1101 Cours 8 Arbres équilibrés INF1101 – Algorithmes et structures de données.

Présentations similaires


Présentation au sujet: "INF1101 Cours 8 Arbres équilibrés INF1101 – Algorithmes et structures de données."— Transcription de la présentation:

1 INF1101 Cours 8 Arbres équilibrés INF1101 – Algorithmes et structures de données

2 INF1101 Cours 7 – Arbres équilibrés Analyse des arbres binaires de recherche Arbres AVL Arbres rouge-noir Arbres AA

3 INF1101 Arbres binaires - analyse Le prix dune opération (recherche, insertion, retrait) est proportionnel au nombre de noeuds visités Donc, coût proportionnel à 1+profondeur Meilleur cas: arbre équilibré (les feuilles à peu près toutes à la même profondeur) –insertion et retrait aléatoire tendent à créer un arbre équilibré –profondeur = lg n Pire cas: liste chaînée –par exemple lors de linsertion déléments ordonnés –profondeur = n Donc, le coût est O(lg n) dans le meilleur cas et O(n) dans le pire cas

4 INF1101 Arbres équilibrés – concepts de base Situation idéale visée: sassurer que le sous- arbre de gauche et le sous-arbre de droite sont de même hauteur Ce principe sappliquerait à tous les noeuds de maniè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, mais qui nous assurent des gains en performance

5 INF1101 Arbres AVL Définition: arbre de recherche binaire tel que pour chaque noeud, les hauteurs des ses sous- arbres gauche et droite sont différentes dau plus 1 (on attribue la valeur -1 pour un sous-arbre vide) Avec cette condition, on est assuré de toujours avoir un arbre dont la profondeur est proportionnelle à lg N

6 INF1101 Arbres AVL - exemple 128410162146 Cet arbre est un arbre AVL

7 INF1101 Arbres AVL – exemple 128410162146 Après lajout de 1 ce nest plus un arbre AVL 1 Ces noeuds violent la condition

8 INF1101 Arbres AVL - exemple 12841016214613 Après lajout de 13 ce nest plus un arbre AVL

9 INF1101 Arbres AVL Il faut, après chaque insertion ou retrait, rétablir léquilibre sil a été rompu par lopération Observation importante: après une insertion, seuls les noeuds qui sont sur le chemin du point dinsertion à la racine sont susceptibles dêtre déséquilibrés Deux cas: –insertion dans le sous-arbre de gauche du fils gauche ou dans le sous-arbre de droite du fils droit: Simple rotation –insertion dans le sous-arbre de droite du fils gauche ou dans le sous-arbre de gauche du fils droit: Double rotation

10 INF1101 AVL – exemle de simple rotation 1284101621461 Hauteur = 2 Hauteur = 0

11 INF1101 AVL – exemple de simple rotation 1281614426110

12 INF1101 AVL – exemple de simple rotation 1281614426110

13 INF1101 AVL – exemple de simple rotation 1281614426110

14 INF1101 Arbres AVL – simple rotation (fils gauche) template void BST ::rotateWithLeftChild(Node * & k2) const { Node *k1 = k2->left; k2->left = k1->right; k1->right = k2; k2 = k1; }

15 INF1101 AVL – exemple de double rotation 12 4 16 2 14 6 810 7 Noeud inséré

16 INF1101 AVL – exemple de double rotation 12 4 16 2 14 6 810 7

17 INF1101 AVL – exemple de double rotation 12 4 16 2 14 6 810 7

18 INF1101 AVL – exemple de double rotation 12 4 16 2 14 6 810 7

19 INF1101 AVL – exemple de double rotation 12 4 16 2 14 6 810 7

20 INF1101 AVL – implémentation Algorithme récursif Une fois le noeud inséré, en revenant sur notre chemin, il faut vérifier, pour chaque noeud parcouru, les différences de profondeur des sous-arbres gauche et droite La rotation peut être requise à nimporte quel noeud qui se trouve dans le chemin de la racine au point dinsertion Le retrait est passablement plus compliqué que linsertion (mais demeure O(lg N)) Il y a dautres types darbres équilibrés plus facile à implémenter et plus efficaces

21 INF1101 AVL – exemple détaillé Pour chaque noeud on mettra 0 si ses deux sous-arbres ont la même profondeur +n si le sous-arbre gauche est plus profond avec une différence = n -n si le sous-arbre droit est plus profond avec une différence = n Séquence dinsertion: 2 10 12 4 16 8 6 14

22 INF1101 AVL – exemple détaillé 2 10 12 4 16 8 6 14 2 0

23 INF1101 AVL – exemple détaillé 2 10 12 4 16 8 6 14 210 0

24 INF1101 AVL – exemple détaillé 2 10 12 4 16 8 6 14 2 1012 0 -2

25 INF1101 AVL – exemple détaillé 2 10 12 4 16 8 6 14 10122 Rotation simple 0 0 0

26 INF1101 AVL – exemple détaillé 2 10 12 4 16 8 6 14 101224 0 0 1

27 INF1101 AVL – exemple détaillé 2 10 12 4 16 8 6 14 10122416 0 0 0

28 INF1101 AVL – exemple détaillé 2 10 12 4 16 8 6 14 1012 2 4168 0 -2 0 1

29 INF1101 AVL – exemple détaillé 2 10 12 4 16 8 6 14 101248162 Rotation simple 0 0 0 0 0

30 INF1101 AVL – exemple détaillé 2 10 12 4 16 8 6 14 1012481626 0 1 0 0 1

31 INF1101 AVL – exemple détaillé 2 10 12 4 16 8 6 14 10 12 48162614 0 0 1 -2 1 0 0

32 INF1101 AVL – exemple détaillé 2 10 12 4 16 8 6 14 101448162612 Rotation double 0 1 0 0 0 0 1

33 INF1101 AVL – autre exemple Voici un exemple où la rotation se fait loin du point dinsertion 10 1448162612 1 0 0 0 1 2 1 0 9 0 7 0 Noeud inséré

34 INF1101 AVL – autre exemple 10 1448162612 0 0 1 1 0 9 0 7 0 Après rotation double 0 0 0 Voici un exemple où la rotation se fait loin du point dinsertion

35 INF1101 Arbres Rouge-Noir Larbre a les propriétés suivantes: 1.Chaque noeud est soit rouge soit noir 2.La racine est noire 3.Si un noeud est rouge, tous ses enfants doivent être noirs 4.À partir de nimporte quel noeud, tous les chemins de la racine jusquà un pointeur NULL doivent avoir le même nombre de noeuds noirs Comme la racine est noire et il ne peut y avoir plus de deux noeuds rouges consécutifs, la longueur de tout chemin de la racine à une feuille ne peut être supérieure à 2 fois le nombre de noeuds noirs dans ce chemin

36 INF1101 Arbres Rouge-Noir - Exemple 30 85 80 90 60 5540 50 65 15 20 5 10 70

37 INF1101 Arbres Rouge-Noir - Exemple 30 85 80 90 60 5540 50 65 15 20 5 10 70

38 INF1101 Arbres Rouge-Noir – Contre-exemple 30 85 80 90 60 5540 50 65 15 5 10 70 83 95 2 noeuds noirs 4 noeuds noirs

39 INF1101 Arbres Rouge-Noir - insertion Un noeud inséré est toujours une feuille On peut pas le colorier en noir, puisque cela violerait la condition 4 On colore le noeud en rouge Si le père est noir, pas de problème Si le père est rouge, on viole la condition 3. Dans ce cas, on ajuste larbre, par le biais de changements de couleurs et de rotations

40 INF1101 Premier cas: le frère du noeud parent est noir (on utilise la convention quun noeud NULL est noir) P X G C Noeud inséré A B S D E P X G C A B S D E Rotation simple

41 INF1101 Premier cas: le frère du noeud parent est noir (on utilise la convention quun noeud NULL est noir) P X G C Noeud inséré A B S D E X P G C A B S D E Rotation double

42 INF1101 30 85 80 90 60 5540 50 65 15 20 70 5 3 Noeud inséré 10 (NOIR) Rotation simple Exemple

43 INF1101 30 85 80 90 60 5540 50 65 15 20 70 5 3 10 (NOIR) Rotation simple

44 INF1101 30 85 80 90 60 5540 50 65 15 20 70 5 3 10 (NOIR) Rotation simple

45 INF1101 30 85 80 90 60 5540 50 65 15 20 70 5 3 10 (NOIR) Rotation simple

46 INF1101 30 85 80 90 60 5540 50 65 15 20 70 5 3 10 (NOIR) Rotation simple

47 INF1101 30 85 80 90 60 5540 50 65 15 20 70 5 8 Noeud inséré 10 (NOIR) Rotation double

48 INF1101 30 85 80 90 60 5540 50 65 15 20 70 5 8 10 (NOIR) Rotation double

49 INF1101 30 85 80 90 60 5540 50 65 15 20 70 5 8 10 (NOIR)

50 INF1101 30 85 80 90 60 5540 50 65 15 20 70 5 8 10 (NOIR)

51 INF1101 Si le frère du parent est rouge P X G C Noeud inséré A B S D E P X G C A B S D E Ceci cause un problème. Lequel?

52 INF1101 Si le frère du parent est rouge P X G C Noeud inséré A B S D E P X G C A B S D E Ceci cause un problème. Lequel? Si le parent de P est rouge, il faudra propager vers le haut les ajustements, ce qui nous fait perdre lavantage sur AVL

53 INF1101 Arbres Rouge-Noir – top-down Pour éviter de devoir propager vers le haut lalgorithme de rotation, on peut utiliser une approche top-down Idée: garantir que, lorsquon arrive au point dinsertion, quil ne sagisse pas dun noeud rouge On pourra donc ajouter tout simplement un noeud rouge, sans risque de violer la propriété 3

54 INF1101 Arbres Rouge-Noir – top-down (suite) En descendant dans larbre, lorsquon rencontre un noeud qui a deux fils rouges, on colore ce noeud rouge et noir ses deux fils: Ainsi, le nombre de noeuds noirs dans un chemin demeure inchangé Par contre, on peut se retrouver avec deux noeuds rouges consécutifs, si le parent de X est rouge. Dans ce cas, il faudra appliquer une rotation Ceci fonctionnera parce quon est sur que le noeud frère du parent de X ne peut être que noir. Attention: la racine doit toujours demeurer noire FDFG X FDFG X

55 INF1101 Arbres Rouge-Noir – Exemple détaillé 10 85 15 70 20 60 30 50 65 80 90 40 5 55 10

56 INF1101 Arbres Rouge-Noir – Exemple détaillé 10 85 15 70 20 60 30 50 65 80 90 40 5 55 10 85

57 INF1101 Arbres Rouge-Noir – Exemple détaillé 10 85 15 70 20 60 30 50 65 80 90 40 5 55 10 85 15

58 INF1101 Arbres Rouge-Noir – Exemple détaillé 10 85 15 70 20 60 30 50 65 80 90 40 5 55 15 85 10 Rotation double

59 INF1101 Arbres Rouge-Noir – Exemple détaillé 10 85 15 70 20 60 30 50 65 80 90 40 5 55 15 85 10 Ajustement durant le parcours Attention: la racine ne change pas de couleur

60 INF1101 Arbres Rouge-Noir – Exemple détaillé 10 85 15 70 20 60 30 50 65 80 90 40 5 55 15 85 10 70

61 INF1101 Arbres Rouge-Noir – Exemple détaillé 10 85 15 70 20 60 30 50 65 80 90 40 5 55 15 85 10 70 20

62 INF1101 Arbres Rouge-Noir – Exemple détaillé 10 85 15 70 20 60 30 50 65 80 90 40 5 55 15 70 10 20 85 Rotation simple

63 INF1101 Arbres Rouge-Noir – Exemple détaillé 10 85 15 70 20 60 30 50 65 80 90 40 5 55 15 70 10 20 85

64 INF1101 Arbres Rouge-Noir – Exemple détaillé 10 85 15 70 20 60 30 50 65 80 90 40 5 55 15 70 10 20 85 Ajustement durant le parcours

65 INF1101 Arbres Rouge-Noir – Exemple détaillé 10 85 15 70 20 60 30 50 65 80 90 40 5 55 15 70 10 20 85 60

66 INF1101 Arbres Rouge-Noir – Exemple détaillé 10 85 15 70 20 60 30 50 65 80 90 40 5 55 15 70 10 20 85 60 30

67 INF1101 Arbres Rouge-Noir – Exemple détaillé 10 85 15 70 20 60 30 50 65 80 90 40 5 55 15 70 10 30 85 60 20 Rotation double

68 INF1101 Arbres Rouge-Noir – Exemple détaillé 10 85 15 70 20 60 30 50 65 80 90 40 5 55 15 70 10 30 85 60 20

69 INF1101 Arbres Rouge-Noir – Exemple détaillé 10 85 15 70 20 60 30 50 65 80 90 40 5 55 15 70 10 30 85 60 20 Ajustement durant le parcours

70 INF1101 Arbres Rouge-Noir – Exemple détaillé 10 85 15 70 20 60 30 50 65 80 90 40 5 55 15 70 10 30 85 60 20 50

71 INF1101 Arbres Rouge-Noir – Exemple détaillé 10 85 15 70 20 60 30 50 65 80 90 40 5 55 15 70 10 30 85 60 20 50 Rotation double

72 INF1101 Arbres Rouge-Noir – Exemple détaillé 10 85 15 70 20 60 30 50 65 80 90 40 5 55 15 70 10 30 85 60 20 50

73 INF1101 Arbres Rouge-Noir – Exemple détaillé 10 85 15 70 20 60 30 50 65 80 90 40 5 55 15 70 10 30 85 60 20 50 Ajustement durant le parcours

74 INF1101 Arbres Rouge-Noir – Exemple détaillé 10 85 15 70 20 60 30 50 65 80 90 40 5 55 15 70 10 30 85 60 20 50 65

75 INF1101 Arbres Rouge-Noir – Exemple détaillé 10 85 15 70 20 60 30 50 65 80 90 40 5 55 15 70 10 30 85 60 20 50 65 80 Remarque: ces noeuds nont pas été modifiés parce quil ne sont pas dans le chemin parcouru

76 INF1101 Arbres Rouge-Noir – Exemple détaillé 10 85 15 70 20 60 30 50 65 80 90 40 5 55 15 70 10 30 85 60 20 50 65 8090

77 INF1101 Arbres Rouge-Noir – Exemple détaillé 10 85 15 70 20 60 30 50 65 80 90 40 5 55 15 70 10 30 85 60 20 50 65 8090

78 INF1101 Arbres Rouge-Noir – Exemple détaillé 10 85 15 70 20 60 30 50 65 80 90 40 5 55 15 70 10 30 85 60 20 50 65 8090 Ajustement durant le parcours

79 INF1101 Arbres Rouge-Noir – Exemple détaillé 10 85 15 70 20 60 30 50 65 80 90 40 5 55 15 70 10 30 85 60 20 50 65 8090 40

80 INF1101 Arbres Rouge-Noir – Exemple détaillé 10 85 15 70 20 60 30 50 65 80 90 40 5 55 15 70 10 30 85 60 20 50 65 8090 40 5

81 INF1101 Arbres Rouge-Noir – Exemple détaillé 10 85 15 70 20 60 30 50 65 80 90 40 5 55 15 70 10 30 85 60 20 50 65 8090 40 5 55

82 INF1101 Arbres AA Implémentation plus simple que les autres Une condition supplémentaire: le fils de gauche ne peut pas être rouge Soit le niveau dun noeud défini ainsi: –1 si cest une feuille –niveau du parent si le noeud est rouge –(1 – niveau du parent) si le noeud est noir On construit un arbre équivalent avec cette définition de niveau et on obtient un algorithme plus simple à implémenter (voir livre)

83 INF1101 Question Pourquoi les arbres de recherche binaire sont-ils en général plus efficace quune recherche dichotomique dans un tableau trié? Peut-on imaginer des situations où il serait préférable dutiliser une recherche binaire dans un tableau ordonné?


Télécharger ppt "INF1101 Cours 8 Arbres équilibrés INF1101 – Algorithmes et structures de données."

Présentations similaires


Annonces Google