Structures de données IFT-2000

Slides:



Advertisements
Présentations similaires
La recherche de chemin optimal
Advertisements

Structures de données avancées : Principales structures de fichiers
Structures de données avancées : B arbres
Structures de données avancées : Principales structures de données
Chap. 4 Recherche en Table
Chapitre 3 Les arbres binaires
Arbre-B+ Hypothèse initiale : clé simple et unique Nœud = bloc.
Introduction à l’Algorithmique
Chap. 1 INTRODUCTION Beaucoup de problèmes de la vie courante, tels la gestion de réseaux de communication ou l'ordonnancement de tâches, correspondent.
Chap. 1 Structures séquentielles : listes linéaires
Chapitre VI. Arbres (définition, parcours, représentation)
Cours 8 Arbres équilibrés

LOGO Responsable du cours Mlle Amina GHRAB : 1 ère année IAG Institut Supérieur de Gestion de Tunis.
OCaml – Les arbres L3 MI.
Les structures de données arborescentes
Les algorithmes: complexité et notation asymptotique
Chapitre VII. Tri Tri par tas Tri rapide.
Bibliothèque standard du C++
Arbre Rouge Noir.
Gestion de Fichiers Arbres B.
Indexation 1. Concepts de base 2. Arbre B 3. Indexes secondaires.
Structures de données IFT-2000
Les fichiers indexés (Les B-arbres)
LA STRUCTURE D'ARBRE-B Institut National des Sciences Appliquées – Rouen Département Architecture des Systèmes d’Information.
LES ARBRES IUP 2 Génie Informatique
Structures de données IFT-2000
Arbres Rouge noir Démo : INF3105 Structures de données et algorithmes
Structures de données IFT-2000
Structures de données IFT-2000 Abder Alikacem Standard Template library Édition Septembre 2009 Département dinformatique et de génie logiciel.
Structures de données IFT-2000
Structures de données IFT-10541
Structures de données IFT-2000
Structures de données IFT-10541
Structures de données IFT-2000
Gestion de Fichiers Indexes basés sur les structures d’arbres binaires et indexes à niveaux multiples.
Les arbres binaires.
Arbres binaires complets
Les arbres et tas binomiaux
Gestion de Fichiers GF-10: Traitement Co-Sequentiel: Appariment et Fusion de Plusieures Listes (Base sur les sections de Folk, Zoellick & Riccardi,
IFT-2000: Structures de données Piles et files Dominic Genest, 2009.
Structures de données IFT-2000
IV. Arbres  Arbre binaire (AB) Représentation SDD d’un AB
Structures de données IFT-10541
Structures de données IFT-2000 Abder Alikacem La récursivité Semaine 5 Département dinformatique et de génie logiciel Édition Septembre 2009.
Structures de données IFT-2000
LES ARBRES Un arbre est une structure homogène dont chaque élément,
Structures de données IFT-2000 Abder Alikacem Semaine 12 (2 ième partie) Les B-arbres Département d’informatique et de génie logiciel Édition septembre.
Structures de données IFT-2000 Abder Alikacem Semaine 11 Gestion des arbres binaires de tri et de recherche. Les arbres cousus. Les arbres n-aires Département.
Structures de données IFT-2000
Structures de données IFT-2000 Abder Alikacem Retour sur les listes ordonnées Département dinformatique et de génie logiciel Édition Septembre 2009.
Structures de données IFT-2000 Abder Alikacem La récursivité Département d’informatique et de génie logiciel Édition Septembre 2009.
201 UMLV  Type « dictionnaire » sous-ensembles finis de E (ordonné) avec les opérations : Ens_vide :  Ens Ajouter : Ens x Elément  Ens Enlever.
Structures de données IFT-2000

Structures de données IFT-2000
Graphes 1. Introduction 2. Définition 3. Représentation mémoire
ALGORITHMIQUE Recherches : Tris : séquentielle, dichotomique
Mathématiques Discrètes
Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI)
Arbres binaires et tables de hachage
Structures de données avancées : Fichiers uni-dimensionnels Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI)
Structures de données avancées : B arbres
1 UMLV  FICHIERS Mémoire de masse découpée en blocs Fichier :liste chaînée de blocs, ou arbre de blocs (répertoires - fichiers)‏ Bloc d’éléments Bloc.
Structures de données avancées : Principales structures de données
Structures de données IFT-2000
Structures de données IFT-2000
Structures de données IFT-2000 Abder Alikacem Semaine 10 Les algorithmes de recherche Les structures arborescentes Département d’informatique et de génie.
4/25/2017 4:30 PM Arbres (2,4) CSI2510 CSI2510.
CSI25101 Tri Plus efficace. CSI25102 Tri récursif Le tri récursif divise les données de grande taille en deux presque moitiés et est appelé récursivement.
Transcription de la présentation:

Structures de données IFT-2000 Abder Alikacem Semaine 10 Les algorithmes de recherche Les structures arborescentes Édition septembre 2009 Département d’informatique et de génie logiciel

Les algorithmes de recherche La recherche séquentielle La recherche dichotomique Complexité des algorithmes de recherche Recherche dichotomique et arborescence

La recherche séquentielle Données pas triées 3 1 4 2 8 14 12 11 6 9 10 recherche(3) = 1 comparaison recherche(10) = 11 comparaisons recherche(12) = 7 comparaisons recherche(13) = 11 comparaisons meilleur cas = O(1) pire cas = O(n) en moyenne = O(n/2) absences = O(n)

La recherche séquentielle Données triées 1 2 3 4 6 8 9 10 11 12 14 recherche(1) = 1 comparaison recherche(14) = 11 comparaisons recherche(8) = 6 comparaisons recherche(13) = 11 comparaisons meilleur cas = O(1) pire cas = O(n) en moyenne = O(n/2) absences = O(n/2)

La recherche séquentielle données non triées : données présentes : O(n/2) données absentes : O(n) données triées : données absentes : O(n/2) coût pour trier et maintenir triées !

Modèles d’implantation tableau : liste chaînée : 1 2 3 4 6 8 9 10 11 12 14 1 2 3 4 6 8 9 10 11 12 14

La recherche binaire 1 2 3 4 6 8 9 10 11 12 14 implantation en tableau = accès direct à n’importe quel élément en regardant tout de suite au milieu, on peut éliminer la moitié des données

La recherche binaire 1 2 3 4 6 8 9 10 11 12 14 10

La recherche binaire 1 2 3 4 6 8 9 10 11 12 14 5 10

La recherche binaire 1 2 3 4 6 8 9 10 11 12 14 5 10

La recherche binaire 1 2 3 4 6 8 9 10 11 12 14 5 10

La recherche binaire : 10 ? 1 2 3 4 6 8 9 10 11 12 14 5 10

La recherche binaire : 10 ? 1 2 3 4 6 8 9 10 11 12 14 5 10

La recherche binaire : 10 ? 1 2 3 4 6 8 9 10 11 12 14 5 10 1 2 3 4 6 8 9 10 11 12 14 6 10

La recherche binaire : 10 ? 1 2 3 4 6 8 9 10 11 12 14 5 10 1 2 3 4 6 8 9 10 11 12 14 6 8 10

La recherche binaire : 10 ? 1 2 3 4 6 8 9 10 11 12 14 5 10 1 2 3 4 6 8 9 10 11 12 14 6 8 10

La recherche binaire : 10 ? 1 2 3 4 6 8 9 10 11 12 14 5 10 1 2 3 4 6 8 9 10 11 12 14 6 8 10

La recherche binaire : 10 ? 1 2 3 4 6 8 9 10 11 12 14 5 10 1 2 3 4 6 8 9 10 11 12 14 6 8 10 1 2 3 4 6 8 9 10 11 12 14 6 7

La recherche binaire : 10 ? 1 2 3 4 6 8 9 10 11 12 14 5 10 1 2 3 4 6 8 9 10 11 12 14 6 8 10 1 2 3 4 6 8 9 10 11 12 14 6 7

La recherche binaire : 10 ? 1 2 3 4 6 8 9 10 11 12 14 5 10 1 2 3 4 6 8 9 10 11 12 14 6 8 10 1 2 3 4 6 8 9 10 11 12 14 6 7

La recherche binaire : 10 ? 1 2 3 4 6 8 9 10 11 12 14 5 10 1 2 3 4 6 8 9 10 11 12 14 6 8 10 1 2 3 4 6 8 9 10 11 12 14 6 7 1 2 3 4 6 8 9 10 11 12 14 7

La recherche binaire : 10 ? 1 2 3 4 6 8 9 10 11 12 14 5 10 1 2 3 4 6 8 9 10 11 12 14 6 8 10 1 2 3 4 6 8 9 10 11 12 14 6 7 1 2 3 4 6 8 9 10 11 12 14 7

La recherche binaire : 9.5 ? 1 2 3 4 6 8 9 10 11 12 14 5 10 1 2 3 4 6 8 9 10 11 12 14 6 8 10 1 2 3 4 6 8 9 10 11 12 14 6 7 1 2 3 4 6 8 9 10 11 12 14 7

La recherche binaire : 9.5 ? 11 n 5 n/2 2 n/4 1 n/8 1 2 3 4 6 8 9 10 12 14 11 n 5 10 1 2 3 4 6 8 9 10 11 12 14 5 n/2 6 8 10 2 n/4 1 2 3 4 6 8 9 10 11 12 14 6 7 1 2 3 4 6 8 9 10 11 12 14 1 n/8 7

Tableau comparatif recherche séquentielle : (données triées) données présentes : O(n/2) données absentes : O(n/2) recherche binaire : (données triées) données présentes : O(log n) données absentes : O(log n)

Modèles d’implantation 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

Structures pointées 1 2 3 4 6 8 9 10 11 12 14 1 2 3 4 5 6 7 8 9 10

Structures pointées 1 2 3 4 6 8 9 10 11 12 14 1 2 3 4 5 6 7 8 9 10

Structures pointées 1 2 3 4 6 8 9 10 11 12 14 1 2 3 4 5 6 7 8 9 10

Structures pointées 8 1 2 3 4 6 9 10 11 12 14 1 2 3 4 6 7 8 9 10

Structures pointées 8 1 2 3 4 6 9 10 11 12 14 1 2 3 4 6 7 8 9 10

Structures pointées 8 1 2 3 4 6 9 10 11 12 14 1 2 3 4 6 7 8 9 10

Structures pointées 8 3 11 1 2 4 6 9 10 12 14 1 3 4 6 7 9 10

Structures pointées 8 3 11 1 2 4 6 9 10 12 14 1 3 4 6 7 9 10

Structures pointées 8 3 11 1 2 4 6 9 10 12 14 1 3 4 6 7 9 10

Structures pointées 8 3 11 2 4 10 12 1 6 9 14

Structures pointées 8 3 11 2 4 10 12 1 6 9 14

Structures pointées 8 3 11 2 4 10 12 1 6 9 14

Structures pointées 8 3 11 2 4 10 12 1 6 9 14

Arbre binaire ! 8 3 11 2 4 10 12 1 6 9 14

Arbre = index 8 3 11 2 4 10 12 1 6 9 14

Les structures d’arbres 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

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

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

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

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

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

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

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

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

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

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

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

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

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 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é de ses noeuds. Une chaîne (liste linéaire) est un arbre de degré 1.

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

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

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

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 pour la compression de données

Arbres partiellement ordonnés: le monceau 94 67 18 44 55 12 06 42 La valeur de la clé d’un parent est plus grande (ou égale) à celle de ses 2 fils L’arbre est complet: tous les nœuds sont présents sauf éventuellement dans le dernier niveau. Si c’est le cas, le remplissage des nœuds dans ce niveau doit se faire de gauche à droite.

Les arbres de tri Un arbre binaire de tri ordonne totalement les informations qu’il stocke(par clé) : Toutes les clés de valeur inférieure ou égale à celle de la racine sont stockées dans le descendant gauche de la racine. Toutes les clés de valeur strictement supérieure à celle de la racine sont stockées dans le descendant droit de la racine. Tout ajout, toute suppression de nœud doit maintenir cette propriété vraie. 34 gauche droit 30 20 23 5O 45 29 48 49 24 Ajout de la valeur 49 : 49 Ajoute de la valeur 24 24 Remarque : Tout ajout se fait par une feuille.

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 est alors logarithmique. 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.

Arbres AVL - exemples Un arbre AVL Ces noeuds violent la condition 12 8 16 8 16 4 10 14 4 10 14 2 6 2 6 1 Un arbre AVL Après l’ajout de 1, ce n’est plus un arbre AVL

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, beaucoup plus efficace que la recherche linéaire dans une liste. template <typename X> class Arbre { ... bool rechercher (const X& E); // est retourné : vrai si E est dans l’arbre, faux sinon ... }

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 log2(n). Exemple : n=1024 => complexité ~ 10

Visite arborescente priorité au père (pré-ordre) Les descendants d’un nœud sont traités après lui: 1. visiter la racine r ; 2. visiter récursivement les enfants : v1, v2, …, vk priorité aux fils (post-ordre) Les descendants d’un nœud sont traités avant lui: 1. visiter récursivement les enfants : v1, v2, …, vk 2. visiter la racine r ; ordre symétrique (en-ordre) Le descendant de gauche est traité avant le nœud, le droit est traité après lui: 1. visiter l’enfant de gauche (v1) 2. visiter la racine r ; 3. visiter l’enfant de droite (v2)

Parcours par niveau - * * / log 3 n 1 n + n 1 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 largeur (contagion) tel que discuté dans le cours. / * log + - 3 n 1 - * * / log 3 n 1 n + n 1

Adressage hiérarchique Il s’agit d’adresser chaque nœud par une chaîne de caractères. La racine a comme adresse 1 , son fils gauche 1.1, son fils droit 1.2. Tout fils gauche a comme adresse l’adresse de son parent qu’on concatène 1, on concatène 2 pour les fils droits. 1 1.1 1.2 1.1.1 1.1.2 1.2.1 1.2.2 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

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

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

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

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

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

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

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

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

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

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 ≤ ≤

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 +

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 -

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 (≤)

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 (≤)

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 (≤)

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 (≤)

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 (≤)

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 (≤)

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 (≤)

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 (≤)

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

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

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

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

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

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

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é Désavantages : espace perdu pour les trous 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

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

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. 9 1 2 3 4 5 6 7 8 11 12 14 15 10 13 Arbre de degré 3 complet Arbre de degré 2 complet

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 = 2p – 1, p= nombre de niveaux hauteur = log((n + 1)/ 2). 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 9 1 2 3 4 5 6 7 8 11 12 14 15 10 13

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

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

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 Exercice Définissez les attributs privés (modèle d’implantation) en tenant compte de cette version dans l’implantation.

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

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.