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

Structures de données IFT-2000

Présentations similaires


Présentation au sujet: "Structures de données IFT-2000"— Transcription de la présentation:

1 Structures de données IFT-2000
Abder Alikacem Semaine 10 Les arbres (1) Édition septembre 2009 Département d’informatique et de génie logiciel

2 Plan Définitions Parcours d’arbres
Arbres binaires complets ou feuillus Description en terme de type abstrait et implantation Dans un tableau Par chaînage dynamique

3 Définitions Un arbre orienté (appelé parfois arbre enraciné) est un graphe acyclique orienté qui vérifie les conditions suivantes: Il existe exactement un noeud qui n'a pas de ‘ prédécesseur ’. Ce noeud s'appelle la racine et l'ordre d'entrée de la racine est 0. Tous les noeuds, sauf la racine, n'ont qu'un ‘ prédécesseur ’ et ils ont tous un ordre d'entrée égal à 1. Il existe un chemin unique de la racine à chaque noeud. R M N A B O P Q S T V

4 Exemples livre C1.2 C1 C2 C3 C1.1 C1.3 C3.2 C3.1
arbre généalogique d ’une famille table des matières d ’un livre livre C1.2 C1 C2 C3 C1.1 C1.3 C3.2 C3.1 (livre(C1((C1.1),(C1.2),(C1.3))),(C2),(C3 ((C3.1),(C3.2))))

5 Terminologie des arbres
Parent d’un nœud (Père) : Le nœud immédiatement prédécesseur. Parent(B) = {M} R Parent(R) = { } M N Parent(Q) = {N} A B O P Q S T V

6 Terminologie des arbres
Parent d’un nœud (Père) : Le nœud immédiatement prédécesseur. Enfant(s) d’un nœud (fils) : Le(s) nœud(s) immédiatement successeur(s) du nœud. Enfant(B) = {V} R Enfants(R) = {M,N} M N Enfant(Q) = { } A B O P Q S T V

7 Terminologie des arbres
Parent d’un nœud (Père) : Le nœud immédiatement prédécesseur. Enfant(s) d’un nœud (fils) : Le ou les nœuds immédiatement successeurs du nœud. Racine : Un nœud qui n’a pas de prédécesseur. Racine(Arbre) = {R} R M N A B O P Q S T V

8 Terminologie des arbres
Parent d’un nœud (Père) : Le nœud immédiatement prédécesseur. Enfant(s) d’un nœud (fils) : Le ou les nœuds immédiatement successeurs du nœud. Racine : Un nœud qui n’a pas de prédécesseur. Feuille : Un nœud qui n’a pas d’enfants. Feuilles(Arbre) = {S,T,Y,O,P,Q} R M N A B O P Q S T V

9 Terminologie des arbres
Parent d’un nœud (Père) : Le nœud immédiatement prédécesseur. Enfant(s) d’un nœud (fils) : Le ou les nœuds immédiatement successeurs du nœud. Racine : Un nœud qui n’a pas de prédécesseur. Feuille : Un nœud qui n’a pas d’enfants. Ancêtre(s) d’un nœud : Tous les nœuds prédécesseurs jusqu’à la racine. Ancêtres(B) = {M,R} R Ancêtre(R) = { } M N Ancêtres(Q) = {N,R} A B O P Q S T V

10 Terminologie des arbres
Parent d’un nœud (Père) : Le nœud immédiatement prédécesseur. Enfant(s) d’un nœud (fils) : Le ou les nœuds immédiatement successeurs du nœud. Racine : Un nœud qui n’a pas de prédécesseur. Feuille : Un nœud qui n’a pas d’enfants. Ancêtre(s) d’un nœud : Tous les nœuds prédécesseurs jusqu’à la racine. Descendant(s) d’un nœud : Tous les nœuds successeurs jusqu’aux feuilles accessibles par ce nœud. Descendant(B) = {V} R Descendants(R) = {M,N,A,…,V} M N Descendant(Q) = { } A B O P Q S T V

11 Terminologie des arbres
Parent d’un nœud (Père) : Le nœud immédiatement prédécesseur. Enfant(s) d’un nœud (fils) : Le ou les nœuds immédiatement successeurs du nœud. Racine : Un nœud qui n’a pas de prédécesseur. Feuille : Un nœud qui n’a pas d’enfants. Ancêtre(s) d’un nœud : Tous les nœuds prédécesseurs jusqu’à la racine. Descendant(s) d’un nœud : Tous les nœuds successeurs jusqu’aux feuilles accessibles par ce nœud. Profondeur d’un nœud : L’ordre du chemin à partir de la racine. Profondeur(B) = 2 R Profondeur(R) = 0 M N Profondeur(Q) = 2 A B O P Q S T V

12 Terminologie des arbres
Parent d’un nœud (Père) : Le nœud immédiatement prédécesseur. Enfant(s) d’un nœud (fils) : Le ou les nœuds immédiatement successeurs du nœud. Racine : Un nœud qui n’a pas de prédécesseur. Feuille : Un nœud qui n’a pas d’enfants. Ancêtre(s) d’un nœud : Tous les nœuds prédécesseurs jusqu’à la racine. Descendant(s) d’un nœud : Tous les nœuds successeurs jusqu’aux feuilles accessibles par ce nœud. Profondeur d’un nœud : L’ordre du chemin à partir de la racine. Hauteur d’un nœud : Le chemin le plus long pour atteindre une feuille. Hauteur(B) = 1 R Hauteur(R) = 3 M N Hauteur(Q) = 0 A B O P Q S T V

13 Terminologie des arbres
Parent d’un nœud (Père) : Le nœud immédiatement prédécesseur. Enfant(s) d’un nœud (fils) : Le ou les nœuds immédiatement successeurs du nœud. Racine : Un nœud qui n’a pas de prédécesseur. Feuille : Un nœud qui n’a pas d’enfants. Ancêtre(s) d’un nœud : Tous les nœuds prédécesseurs jusqu’à la racine. Descendant(s) d’un nœud : Tous les nœuds successeurs jusqu’aux feuilles accessibles par ce nœud. Profondeur d’un nœud : L’ordre du chemin à partir de la racine. Hauteur d’un nœud : Le chemin le plus long pour atteindre une feuille. Niveau d’un nœud : La hauteur de l’arbre moins la profondeur du nœud. R Niveau(R) = 3 – 0 = 3 M N Niveau(Q) = 3 – 2 = 1 A B O P Q S T V

14 Terminologie des arbres
Parent d’un nœud (Père) : Le nœud immédiatement prédécesseur. Enfant(s) d’un nœud (fils) : Le ou les nœuds immédiatement successeurs du nœud. Racine : Un nœud qui n’a pas de prédécesseur. Feuille : Un nœud qui n’a pas d’enfants. Ancêtre(s) d’un nœud : Tous les nœuds prédécesseurs jusqu’à la racine. Descendant(s) d’un nœud : Tous les nœuds successeurs jusqu’aux feuilles accessibles par ce nœud. Profondeur d’un nœud : L’ordre du chemin à partir de la racine. Hauteur d’un nœud : Le chemin le plus long pour atteindre une feuille. Niveau d’un nœud : La hauteur de l’arbre moins la profondeur du nœud. Forêt : Un ensemble d’arbre. M N A B O P Q S T V

15 Terminologie des arbres
Un arbre est soit vide ou possède une racine à laquelle est rattaché zéro ou plusieurs sous-arbres non vides. Racine ==> structures récursives Racine de T1 T1 Racine de T2 T2

16 Terminologie des arbres
Le sous-arbre de racine i est l’arbre composé des descendants de i, enraciné en i On appelle aussi ce sous-arbre : fils de b b a n i r e z ==> algorithmes récursifs Le nombre de sous-arbres associés à un noeud (nombre de descendants directs) est appelé le degré du noeud. Le degré d'un arbre correspond au degré le plus élevé deses noeuds. Une chaîne (liste linéaire) est un arbre de degré 1.

17 Une liste est un arbre de degré 1
tableau liste chaînée 1 2 3 4 6 8 9 10 11 12 14 10 1 2 3 4 6 8 9 10 11 12 14

18 Un arbre de degré 2 est appelé arbre binaire.
racine nœuds internes feuilles sous-arbre de gauche sous-arbre de droite

19 Un arbre de degré n est appelé arbre n-aire.
Arbres n-aire Un arbre de degré n est appelé arbre n-aire. racine ... nœuds internes feuilles

20 B-arbres d’ordre 5 (ou arbre 2-5)
25    30 40             

21 Les arbres ordonnés Un arbre ordonné est un arbre où la position respective des sous-arbres reflète une relation d'ordre. Exemple: l’arbre de Huffman

22 Les arbres ordonnés Exemple : arbre arithmétique
Les opérandes sont placées dans les nœuds feuilles, les opérateurs binaires dans les autres nœuds. L’évaluation d’un arbre arithmétique se fait en appliquant l’opérateur à sa racine au résultat des sous-arbres de gauche et de droite.

23 Arbres partiellement ordonnés: Le monceau
94 67 18 44 55 12 06 42

24 Les arbres de tri Un arbre binaire de tri ordonne totalement les informations qu’il stocke(par clé) : Toutes les clés des valeurs inférieures ou égales à celle de la racine sont stockées dans le descendant gauche de la racine Toutes les clés des valeurs strictement supérieures à celle de la racine sont stockées dans le descendant droit de la racine 34 30 20 23 5O 45 gauche 48 droit 29 Propriété caractéristique des arbres de tri: Pour chaque nœud n de l’arbre : (1) n.arbreGauche.maxVal<=n.val<n.arbreDroit.minVal

25 Les arbres de tri 34 Conditions
La classe Valeur doit disposer d’une fonction de comparaison sur les clés Tout ajout, toute suppression de nœud doit maintenir la propriété (1) vraie gauche droit 30 20 23 5O 45 29 48 49 Exemple : ajouter la valeur 49 : 24 Exemple : ajouter la valeur 24 49 24 Remarque : Tout ajout se fait par une feuille.

26 Les arbres de recherche
Un arbre de tri est également dit de recherche à condition d’être équilibré. Un arbre équilibré est un arbre organisé de telle manière à ce que sa profondeur soit minimale. La recherche d'un élément dans un arbre de recherche est logarithmique.

27 Les arbres de recherche
Ce sont des arbres de tri équilibrés. Critères HB[k] (height-balanced(k) tree) HB[2] HB[1] Les arbres équilibrés sont dits arbres AVL (du nom de leurs inventeurs Adel'son -Vel'skii Landis en 1962). Un arbre binaire est dit équilibré lorsque la différence entre les hauteurs des fils gauche et droit de tout noeud ne peut excéder 1 en valeur absolue (si HB[1] ): |hauteur (sous-arbre droit) - hauteur (sous-arbre gauche)|  1 Cette différence de hauteur est appelée facteur d’équilibre.

28 Arbres AVL - exemple 12 16 8 4 10 14 2 6 Un arbre AVL

29 Arbres AVL – exemple Ces noeuds violent la condition 12 16 8 4 10 14 2
Après l’ajout de 1 ce n’est plus un arbre AVL 1

30 AVL – exemple de simple rotation
12 16 8 Hauteur = 2 4 10 14 2 6 Hauteur = 0 1

31 AVL – exemple de simple rotation
12 16 8 4 10 14 2 6 1

32 AVL – exemple de simple rotation
12 4 16 14 2 8 10 6 1

33 AVL – exemple de simple rotation
12 4 16 14 2 8 10 6 1

34 AVL – exemple de double rotation
12 8 16 10 4 14 2 6 Noeud inséré 7

35 AVL – exemple de double rotation
12 8 16 10 4 14 2 6 7

36 AVL – exemple de double rotation
12 8 16 10 6 14 4 7 2

37 AVL – exemple de double rotation
12 8 16 10 6 14 4 7 2

38 AVL – exemple de double rotation
12 6 16 14 8 4 10 2 7

39 Arbres de recherche et algorithmique
Les arbres binaires de recherche présentent deux avantages : tri efficace car les valeurs sont maintenues ordonnées recherche efficace par dichotomie template <typename X> class Arbre { ... bool rechercher (const X& E); // est retourné : vrai si E est dans l’arbre, faux sinon ... }

40 Arbres de recherche et algorithmique
bool rechercher (const X& E); // est retourné : vrai si E est dans l’arbre, faux sinon si vide => retourner faux sinon si (E = valeur racine) => retourner vrai si (E<valeur racine) => retourner rechercher dans sous-arbre gauche sinon retourner rechercher dans sous-arbre droit fsi Si N est le nombre de nœuds et si l ’arbre est équilibré alors la complexité de l ’algorithme de recherche dichotomique est de l ’ordre de Log 2 (N). Exemple : N=1024 => complexité ~ 10

41 Arbres de recherche et algorithmique
Les arbres binaires de recherche sont des structures de données efficaces pour implanter des suites ordonnées dynamiques. Les opérations associées sont:RECHERCHER, MINIMUM,MAXIMUM, SUCCESSEUR, PREDECESSEUR , INSERER et SUPPRIMER . Pour un ABR complet, les opérations de base sur les arbres binaires de recherche ont une complexité de l ’ordre de Log2(N), N étant le nombre de nœuds. Cependant, quand l’arbre est dégénéré : s ’il se réduit par exemple à une liste linéaire chaînée alors les opérations ont une complexité de l ’ordre de (N). Un arbre est dégénéré si tous les nœuds de cet arbre ont au plus un descendant. Un arbre dégénéré est équivalent à une liste linéaire Pour garantir de bonnes performances, il existe une variante des arbres de recherche : les arbres rouge et noir (nous les verrons plus tard).

42 Propriétés des arbres Le nombre maximum de noeuds qu'un arbre de profondeur "p" et de degré "d" peut contenir, si tous les noeuds internes ont "d" descendants, est : à la racine (niveau 1), on a d 0 =1 nœud , au niveau 2, on a d 1 noeuds, au niveau p, on a d p-1 noeuds, En particulier, pour un arbre binaire, on a:

43 Propriétés des arbres La longueur maximale d'un chemin est la hauteur de l'arbre. Pour un arbre binaire avec n noeuds, étant donné que le nombre maximum de feuilles est (n + 1) / 2, la longueur maximale d'un chemin est log2[(n + 1) / 2)]. La recherche d'un noeud dans un arbre est beaucoup plus efficace que la recherche linéaire dans une liste, où le chemin maximal est n.

44 Visite arborescente Dans le parcours préordre, les descendants d’un nœud sont traités après lui: priorité au père (pré-ordre) 1. visiter la racine r ; 2. visiter récursivement les enfants : v1, v2, …, vk R M N A B O P Q T Ø

45 Visite arborescente R priorité au père (pré-ordre)
1. visiter la racine r ; 2. visiter récursivement les enfants : v1, v2, …, vk 1 R 2 3 M N A B O P Q T R

46 Visite arborescente R priorité au père (pré-ordre)
1. visiter la racine r ; 2. visiter récursivement les enfants : v1, v2, …, vk 1 R 2 3 M N A B O P Q T R

47 Visite arborescente R,M priorité au père (pré-ordre)
1. visiter la racine r ; 2. visiter récursivement les enfants : v1, v2, …, vk R 1 M N 2 3 A B O P Q T R,M

48 Visite arborescente R,M priorité au père (pré-ordre)
1. visiter la racine r ; 2. visiter récursivement les enfants : v1, v2, …, vk R 1 M N 2 3 A B O P Q T R,M

49 Visite arborescente R,M,A priorité au père (pré-ordre)
1. visiter la racine r ; 2. visiter récursivement les enfants : v1, v2, …, vk R M N 1 A B O P Q 2 3 T R,M,A

50 Visite arborescente R,M,A priorité au père (pré-ordre)
1. visiter la racine r ; 2. visiter récursivement les enfants : v1, v2, …, vk R M N 1 A B O P Q 2 3 T R,M,A

51 Visite arborescente R,M,A,T priorité au père (pré-ordre)
1. visiter la racine r ; 2. visiter récursivement les enfants : v1, v2, …, vk R M N A B O P Q 1 T R,M,A,T 2 3

52 Visite arborescente R,M,A,T priorité au père (pré-ordre)
1. visiter la racine r ; 2. visiter récursivement les enfants : v1, v2, …, vk R M N A B O P Q T R,M,A,T

53 Visite arborescente priorité au père (pré-ordre) R,M,A,T
1. visiter la racine r ; 2. visiter récursivement les enfants : v1, v2, …, vk R 1 M N 2 3 A B O P Q T R,M,A,T

54 Visite arborescente R,M,A,T priorité au père (pré-ordre)
1. visiter la racine r ; 2. visiter récursivement les enfants : v1, v2, …, vk R 1 M N 2 3 A B O P Q T R,M,A,T

55 Visite arborescente R,M,A,T,B priorité au père (pré-ordre)
1. visiter la racine r ; 2. visiter récursivement les enfants : v1, v2, …, vk R M N 1 A B O P Q 2 3 T R,M,A,T,B

56 Visite arborescente R,M,A,T,B priorité au père (pré-ordre)
1. visiter la racine r ; 2. visiter récursivement les enfants : v1, v2, …, vk 1 R 2 3 M N A B O P Q T R,M,A,T,B

57 Visite arborescente R,M,A,T,B,... priorité au père (pré-ordre)
1. visiter la racine r ; 2. visiter récursivement les enfants : v1, v2, …, vk 1 R 2 3 M N A B O P Q T R,M,A,T,B,...

58 Visite arborescente R,M,A,T,B,N,O,P,Q priorité au père (pré-ordre)
1. visiter la racine r ; 2. visiter récursivement les enfants : v1, v2, …, vk 1 R 2 3 M N A B O P Q T R,M,A,T,B,N,O,P,Q

59 Utilité d’un pré-ordre
( (1/n) * (log(n+1)) ) - (3*n) - * * n / log 3 1 n + n 1 Jan Lukasiewicz - * / 1 n log + n 1 * 3 n

60 Visite arborescente Dans le parcours post-ordre, les descendants d’un nœud sont traités avant lui: priorité aux fils (post-ordre) 1. visiter récursivement les enfants : v1, v2, …, vk 2. visiter la racine r ; 3 R 1 2 M N A B O P Q T Ø

61 Visite arborescente Ø priorité aux fils (post-ordre)
1. visiter récursivement les enfants : v1, v2, …, vk 2. visiter la racine r ; 3 R 1 2 M N A B O P Q T Ø

62 Visite arborescente Ø priorité aux fils (post-ordre)
1. visiter récursivement les enfants : v1, v2, …, vk 2. visiter la racine r ; R 3 M N 1 2 A B O P Q T Ø

63 Visite arborescente priorité aux fils (post-ordre) Ø
1. visiter récursivement les enfants : v1, v2, …, vk 2. visiter la racine r ; R M N 3 A B O P Q 1 2 T Ø

64 Visite arborescente priorité aux fils (post-ordre) T
1. visiter récursivement les enfants : v1, v2, …, vk 2. visiter la racine r ; R M N A B O P Q 3 T T 1 2

65 Visite arborescente T,A priorité aux fils (post-ordre)
1. visiter récursivement les enfants : v1, v2, …, vk 2. visiter la racine r ; R M N 3 A B O P Q 1 2 T T,A

66 Visite arborescente T,A priorité aux fils (post-ordre)
1. visiter récursivement les enfants : v1, v2, …, vk 2. visiter la racine r ; R 3 M N 1 2 A B O P Q T T,A

67 Visite arborescente T,A,B priorité aux fils (post-ordre)
1. visiter récursivement les enfants : v1, v2, …, vk 2. visiter la racine r ; R 3 M N 1 2 A B O P Q T T,A,B

68 Visite arborescente T,A,B,M priorité aux fils (post-ordre)
1. visiter récursivement les enfants : v1, v2, …, vk 2. visiter la racine r ; R 3 M N 1 2 A B O P Q T T,A,B,M

69 Visite arborescente T,A,B,M priorité au fils (post-ordre)
1. visiter récursivement les enfants : v1, v2, …, vk 2. visiter la racine r ; 3 R 1 2 M N A B O P Q T T,A,B,M

70 Visite arborescente T,A,B,M,... priorité aux fils (post-ordre)
1. visiter récursivement les enfants : v1, v2, …, vk 2. visiter la racine r ; 3 R 1 2 M N A B O P Q T T,A,B,M,...

71 Visite arborescente T,A,B,M,O,P,Q,N,R priorité aux fils (post-ordre)
1. visiter récursivement les enfants : v1, v2, …, vk 2. visiter la racine r ; 3 R 1 2 M N A B O P Q T T,A,B,M,O,P,Q,N,R

72 Utilité d’un post-ordre
( (1/n) * (log(n+1)) ) - (3*n) / * log + - 3 n 1 Jan Lukasiewicz 1 n / n 1 + log * 3 n * -

73 Visite arborescente Dans le parcours en ordre, un descendant est traité avant le nœud, l’autre est traité après lui: ordre symétrique (en-ordre) 1. visiter l’enfant de gauche (v1) 2. visiter la racine r ; 3. visiter l’enfant de droite (v2) R M N A B O Q T

74 Visite arborescente Ø ordre symétrique (en-ordre)
1. visiter l’enfant de gauche (v1) 2. visiter la racine r ; 3. visiter l’enfant de droite (v2) R M N A B O Q T Ø

75 Visite arborescente A ordre symétrique (en-ordre)
1. visiter l’enfant de gauche (v1) 2. visiter la racine r ; 3. visiter l’enfant de droite (v2) R M N A B O Q T A

76 Visite arborescente A,T ordre symétrique (en-ordre)
1. visiter l’enfant de gauche (v1) 2. visiter la racine r ; 3. visiter l’enfant de droite (v2) R M N A B O Q T A,T

77 Visite arborescente A,T,M ordre symétrique (en-ordre)
1. visiter l’enfant de gauche (v1) 2. visiter la racine r ; 3. visiter l’enfant de droite (v2) R M N A B O Q T A,T,M

78 Visite arborescente A,T,M,B ordre symétrique (en-ordre)
1. visiter l’enfant de gauche (v1) 2. visiter la racine r ; 3. visiter l’enfant de droite (v2) R M N A B O Q T A,T,M,B

79 Visite arborescente A,T,M,B,R ordre symétrique (en-ordre)
1. visiter l’enfant de gauche (v1) 2. visiter la racine r ; 3. visiter l’enfant de droite (v2) R M N A B O Q T A,T,M,B,R

80 Visite arborescente A,T,M,B,R,O ordre symétrique (en-ordre)
1. visiter l’enfant de gauche (v1) 2. visiter la racine r ; 3. visiter l’enfant de droite (v2) R M N A B O Q T A,T,M,B,R,O

81 Visite arborescente A,T,M,B,R,O,N ordre symétrique (en-ordre)
1. visiter l’enfant de gauche (v1) 2. visiter la racine r ; 3. visiter l’enfant de droite (v2) R M N A B O Q T A,T,M,B,R,O,N

82 Visite arborescente A,T,M,B,R,O,N,Q ordre symétrique (en-ordre)
1. visiter l’enfant de gauche (v1) 2. visiter la racine r ; 3. visiter l’enfant de droite (v2) R M N A B O Q T A,T,M,B,R,O,N,Q

83 Visite arborescente ordre symétrique (B-arbres) 1. visiter les enfants de gauche (k) 2. visiter k ; 3. visiter les enfant de droite (k) 25    30 40             

84 Utilité de l’ordre symétrique
( (1/n) * (log(n+1)) ) - (3*n) / * log + - 3 n 1 1 / n * log n * n (((1/n) * (log(n+1))) - (3*n))

85 Utilité de l’ordre symétrique
1 2 3 4 6 8 9 10 11 12 14 1,2,3,4,6,8,9,10,11,12,14

86 Parcours par ordre de niveau
( (1/n) * (log(n+1)) ) - (3*n) / * log + - 3 n 1 - * * / log 3 n 1 n + n 1

87 Parcours par niveau Dans le parcours par niveau, tous les nœuds d’un même niveau sont traités avant de descendre au niveau suivant. L’algorithme utilise une file. Il s’agit d’un parcours par contagion tel que donné dans le manuel de cours.

88 Adressage hiérarchique
opérations facilitées : comparaison rapide de nœuds <1 ? 1.1.2>, <1.1 ? 1.2> trouver le parent commun <1.1.2 ? 1.2>, <1.1 ? 1.2> positionne le nœud dans l’arbre 1 1.1 1.2 1.1.1 1.1.2 1.2.1 1.2.2

89 Exercice Dessiner l’arbre binaire dont le parcours symétrique et le parcours en pré-ordre sont les suivants : symétrique : A,B,D,E,L,P,S,O pré-ordre : O,S,P,L,E,D,B,A

90 Exercice Dessiner l’arbre binaire dont le parcours symétrique et le parcours en pré-ordre sont les suivants : symétrique : D,L,P,S,E,A,O,B pré-ordre : P,D,L,O,A,S,E,B

91 Opérateurs (arbres binaires)
arbre vide ? nombre de nœuds d’un arbre nombre de feuilles d’un arbre élément de la racine d’un arbre sous-arbre de gauche d’un nœud sous-arbre de droite d’un nœud hauteur à partir d’un nœud appartenance d’un élément à un arbre ajout (insertion) dans un arbre enlèvement dans un arbre

92 Opérateurs (arbres binaires)
arbre vide ? nombre de nœuds d’un arbre nombre de feuilles d’un arbre élément de la racine d’un arbre sous-arbre de gauche d’un nœud sous-arbre de droite d’un nœud hauteur à partir d’un nœud appartenance d’un élément à un arbre ajout (insertion) dans un arbre enlèvement dans un arbre

93 Opérateurs (arbres binaires)
arbre vide ? nombre de nœuds d’un arbre nombre de feuilles d’un arbre élément de la racine d’un arbre sous-arbre de gauche d’un nœud sous-arbre de droite d’un nœud hauteur à partir d’un nœud appartenance d’un élément à un arbre ajout (insertion) dans un arbre enlèvement dans un arbre

94 Opérateurs (arbres binaires)
arbre vide ? nombre de nœuds d’un arbre nombre de feuilles d’un arbre élément de la racine d’un arbre sous-arbre de gauche d’un nœud sous-arbre de droite d’un nœud hauteur à partir d’un nœud appartenance d’un élément à un arbre ajout (insertion) dans un arbre enlèvement dans un arbre

95 Opérateurs (arbres binaires)
arbre vide ? nombre de nœuds d’un arbre nombre de feuilles d’un arbre élément de la racine d’un arbre sous-arbre de gauche d’un nœud sous-arbre de droite d’un nœud hauteur à partir d’un nœud appartenance d’un élément à un arbre ajout (insertion) dans un arbre enlèvement dans un arbre

96 Opérateurs (arbres binaires)
arbre vide ? nombre de nœuds d’un arbre nombre de feuilles d’un arbre élément de la racine d’un arbre sous-arbre de gauche d’un nœud sous-arbre de droite d’un nœud hauteur à partir d’un nœud appartenance d’un élément à un arbre ajout (insertion) dans un arbre enlèvement dans un arbre

97 Opérateurs (arbres binaires)
arbre vide? nombre de nœuds d’un arbre nombre de feuilles d’un arbre élément de la racine d’un arbre sous-arbre de gauche d’un nœud sous-arbre de droite d’un nœud hauteur à partir d’un nœud appartenance d’un élément à un arbre ajout (insertion) dans un arbre enlèvement dans un arbre

98 Opérateurs (arbres binaires)
arbre vide? nombre de nœuds d’un arbre nombre de feuilles d’un arbre élément de la racine d’un arbre sous-arbre de gauche d’un nœud sous-arbre de droite d’un nœud hauteur à partir d’un nœud appartenance d’un élément à un arbre ajout (insertion) dans un arbre enlèvement dans un arbre

99 Opérateurs (arbres binaires)
arbre vide? nombre de nœuds d’un arbre nombre de feuilles d’un arbre élément de la racine d’un arbre sous-arbre de gauche d’un nœud sous-arbre de droite d’un nœud hauteur à partir d’un nœud appartenance d’un élément à un arbre ajout (insertion) dans un arbre enlèvement dans un arbre

100 Opérateurs (arbres binaires)
arbre vide? nombre de nœuds d’un arbre nombre de feuilles d’un arbre élément de la racine d’un arbre sous-arbre de gauche d’un nœud sous-arbre de droite d’un nœud hauteur à partir d’un nœud appartenance d’un élément à un arbre ajout (insertion) dans un arbre enlèvement dans un arbre +

101 Opérateurs (arbres binaires)
arbre vide? nombre de nœuds d’un arbre nombre de feuilles d’un arbre élément de la racine d’un arbre sous-arbre de gauche d’un nœud sous-arbre de droite d’un nœud hauteur à partir d’un nœud appartenance d’un élément à un arbre ajout (insertion) dans un arbre enlèvement dans un arbre -

102 Opérateurs (arbres binaires)
minimum des éléments d’un arbre (≤) maximum des éléments d’un arbre (≤) enfants d’un nœud descendants d’un nœud père (parent) d’un nœud ancêtres d’un nœud successeur d’un nœud (≤) prédécesseur d’un nœud (≤)

103 Opérateurs (arbres binaires)
minimum des éléments d’un arbre (≤) maximum des éléments d’un arbre (≤) enfants d’un nœud descendants d’un nœud père (parent) d’un nœud ancêtres d’un nœud successeur d’un nœud (≤) prédécesseur d’un nœud (≤)

104 Opérateurs (arbres binaires)
minimum des éléments d’un arbre (≤) maximum des éléments d’un arbre (≤) enfants d’un nœud descendants d’un nœud père (parent) d’un nœud ancêtres d’un nœud successeur d’un nœud (≤) prédécesseur d’un nœud (≤)

105 Opérateurs (arbres binaires)
minimum des éléments d’un arbre (≤) maximum des éléments d’un arbre (≤) enfants d’un nœud descendants d’un nœud père (parent) d’un nœud ancêtres d’un nœud successeur d’un nœud (≤) prédécesseur d’un nœud (≤)

106 Opérateurs (arbres binaires)
minimum des éléments d’un arbre (≤) maximum des éléments d’un arbre (≤) enfants d’un nœud descendants d’un nœud père (parent) d’un nœud ancêtres d’un nœud successeur d’un nœud (≤) prédécesseur d’un nœud (≤)

107 Opérateurs (arbres binaires)
minimum des éléments d’un arbre (≤) maximum des éléments d’un arbre (≤) enfants d’un nœud descendants d’un nœud père (parent) d’un nœud ancêtres d’un nœud successeur d’un nœud (≤) prédécesseur d’un nœud (≤)

108 Opérateurs (arbres binaires)
minimum des éléments d’un arbre (≤) maximum des éléments d’un arbre (≤) enfants d’un nœud descendants d’un nœud père (parent) d’un nœud ancêtres d’un nœud successeur d’un nœud (≤) prédécesseur d’un nœud (≤)

109 Opérateurs (arbres binaires)
minimum des éléments d’un arbre (≤) maximum des éléments d’un arbre (≤) enfants d’un nœud descendants d’un nœud père (parent) d’un nœud ancêtres d’un nœud successeur d’un nœud (≤) prédécesseur d’un nœud (≤)

110 Implantation en tableau
8 3 11 2 4 10 12 1 6 9 14 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

111 Implantation en tableau
8 3 11 2 4 10 12 9 9 1 6 9 14 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

112 Implantation en tableau
appariement : la racine est à l’indice 1 sous-arbre de gauche est à 2*i sous-arbre de droite est à 2*i + 1 parent de l’élément d’indice i est à i/2 frère de droite est à i+1 (si i pair et i+1 ≤ N) frère de gauche est à i-1 (si i impair et i ≠ 1) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

113 Implantation en tableau
8 3 11 2 4 10 12 9 9 1 6 9 14 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

114 Implantation en tableau
1 8 2 3 3 11 4 5 6 7 2 4 10 12 9 9 1 6 9 14 8 9 10 11 12 13 14 15 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

115 Implantation en tableau
1 8 2 3 3 11 4 5 6 7 2 4 10 12 9 9 1 6 9 14 8 9 10 11 12 13 14 15 8 3 11 2 4 10 12 1 6 9 14 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

116 Implantation en tableau
Avantages : simplicité d’implantation aucun espace perdu pour les pointeurs espace pour insérer un nœud déjà disponible parcours par niveau facilité parcours des feuilles facilité 8 3 11 2 4 10 12 1 6 9 14 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

117 Implantation en tableau
Désavantages : espace perdu pour les trous trouvez des cas où il y aura plusieurs trous ! on doit prévoir le pire cas en espace, ou réallouer le tableau et le recopier besoin d’une sentinelle pour signifier l’absence de données (ou utilisation d’un booléen) trouvez le pire cas ! 8 3 11 2 4 10 12 1 6 9 14 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

118 Implantation en tableau
Désavantages : pire cas 1 8 3 11 Arbre dégénéré vers la droite 7 12 8 11 12 14 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 15 14

119 Arbre feuillu ou complet
Arbre complet: Un arbre de degré n est dit complet lorsque tous ses niveaux, à l’exception du dernier, possède un nombre maximal de nœuds. Le dernier niveau, quant à lui, est partiellement rempli de gauche à droite, sans trou. Ainsi, un arbre de degré n doit posséder ni nœuds au niveau i. Arbre de degré 3 Arbre de degré 3 complet

120 Arbre binaire feuillu ou complet
indice du premier élément du niveau k ? nombre de feuilles ? nombre de nœuds internes ? nombre de nœuds ? hauteur ? 1 9 2 3 4 5 6 7 8 9 10 11 12 13 14 15

121 2 - 1 Arbre binaire feuillu ou complet
indice du premier élément du niveau k ? nombre de feuilles maximum = (n + 1) / 2 nombre de nœuds maximum = hauteur = log(n + 1) / 2). 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 9 p 2 - 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

122 La classe Arbre (binaire)
template <typename T> class Arbre { public: // … private: T * tab; // ou vector<T> v int cpt; // Nombre d'éléments dans le tableau, inutile si vector }; Implantation par tableau ou vector

123 Implantation en tableau et visite arborescente
template <typename T> void Arbre<T>::affiche() { _auxAffiche(0);} template <typename T> void Arbre<T>:: _auxAffiche(int i) { if (i<0) throw invalid_argument( Affiche:…. ); if ( i < cpt) { _auxAffiche(2*i + 1); /* traitement*/ if(tab[i]!=-1) cout << tab[i] <<  ; _auxAffiche(2*i+2); }

124 Implantation en vector et visite arborescente
template <typename T> void Arbre<T>::_auxAffiche(int i) { if (i<0) throw invalid_argument( Affiche:…. ); if ( i < v.size()) { affiche(2*i + 1); /* traitement*/ if(v[i]!=-1) cout << v[i] <<  ; affiche(2*i+2); }

125 Implantation en tableau (2)
compaction des niveaux en conservant explicitement l’indice des enfants de gauche et de droite d’un nœud 8 3 11 2 4 10 12 1 6 9 14 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 8 3 11 2 4 10 12 1 6 9 14 élément d’information indice du sous-arbre de gauche indice du sous-arbre de droite 2 4 6 8 10 3 5 7 9 11

126 Implantation en tableau (2)
Avantages : aucun trou ! pas besoin d’une sentinelle Désavantages : espace additionnel pour l’information de contrôle (c.-à-d. les indices des éléments enfants d’un nœud) revient à gérer une mémoire utilisée comme le tas («heap») problèmes d’ajouts ? d’enlèvements ? 8 3 11 2 4 10 12 1 6 9 14 2 4 6 8 10 3 5 7 9 11

127 Implantation en tableau (2)
Exercice Définissez les attributs privés (modèle d’implantation) en tenant compte de cette version dans l’implantation.

128 La classe Arbre (binaire)
template <typename E> class Arbre { public: //..Les méthodes publiques (i.e. les opérateurs) private: // classe Noeud class Noeud { public: E data; Noeud *gauche; Noeud *droite; int card; int hauteur; Noeud( const E&d ): gauche(0),data( d ),droite(0),hauteur(0) { } }; // Les membres données Noeud * racine; //racine de l'arbre long cpt; // Nombre de noeuds dans l'arbre // Les membres méthodes privés //... Implantation par chaînage ... data

129 Implantation par chaînage et visite arborescente
Template <typename E> void Arbre<E>:: _auxParcoursSymetrique(Nœud* arb, E *res, int &ind) { /* ….*/ if (arb==0) return; else { _auxParcoursSymetrique(arb->gauche, res, ind); /* traitement*/ res[ind] = arb->info; ind ++; _auxParcoursSymetrique(arb->droite, res, ind); }

130 Implantation par chaînage et visite arborescente
Exercice Redéfinissez le prototype et la définition de la méthode _auxParcoursSymetrique() dans le cas de l’utilisation d’un vector au lieu d’un tableau pour recueillir les fruits de la visite.

131 Implantation par chaînage
Puisque chaque nœud possède au maximum deux nœuds fils, on maintient un pointeur sur chacun d’eux. Avantages: La taille de l’arbre est dynamique. Facile d’opérer sur des pointeurs. Inconvénients: On doit éviter les fuites de mémoire et les doubles références. On ne peut parcourir l’arbre que de la racine vers les feuilles.


Télécharger ppt "Structures de données IFT-2000"

Présentations similaires


Annonces Google