Arbres binaires de recherche [br] Algorithmique
Un arbre binaire de recherche est une structure de donnée qui permet de représen- sont l'insertion la suppression et la recherche d'une valeur.
Algorithmes sur les arbres binaires de recherche
Seconde implémentation : Arbre Binaire de Recherche Recherche puis suppression dans le cas où l'élément est dans une feuille. `a supprimer.
Programmation fonctionnelle
23 nov. 2011 Un arbre binaire est ordonné (ou de recherche) par rapport `a une ... La suppression d'un élément x dans un arbre binaire de recherche.
ARBRES BINAIRES DE RECHERCHE
temps de ?(logn) au pire tableau trié : insertion/suppression en ?(n) au pire cas Dans un arbre binaire de recherche chaque nœud a une clé.
INF601 : Algorithme et Structure de données - Cours 2 : TDA Arbre
27 févr. 2010 6 Suppression d'un élément ... adjonction et suppression peuvent être en O(n) ... celle de l'arbre binaire de recherche ...
Les arbres binaires de recherche équilibrés
10 Correction d'un arbre rouge-noir après une suppression (cas 2) . La propriété d'arbre binaire de recherche permet de trouver d'insérer ou de.
INF421-a Bases de la programmation et de lalgorithmique Tas
7 oct. 2005 Arbres binaires de recherche. Supprimer dans un tas (la racine). On enl`eve la racine du tas. ? Retasser : le contenu du nœud le plus `a ...
Programmation avancée - Chapitre 1 : Complexité et les ABR
Recherche. Ajout aux feuilles. Ajout à la racine. Suppression. Analyse. Programmation avancée. Chapitre 1 : Complexité et les ABR (arbres binaires de.
Arbres binaires de recherche
Question 8 (Suppression). ´Ecrivez une fonction remove max prenant pour argument un arbre binaire de recherche non-vide a et qui retourne le couple (a z)
Sommaire
Les arbres binaires de recherche (ABR) constituent une structure permettant de algorithmes d'accès d'insertion ou de suppression de données.
Cours 4 : Les arbres binaires - LRI
Un arbre binaire de recherche (ABR) est un arbre binaire dans lequel chaque nœud possède une clé telle que • chaque nœud du sous-arbre gauche possède une clé inférieure ou égale à celle du nœud considéré • chaque nœud du sous-arbre droit possède une clé supérieure ou égale à celle-ci
Les arbres binaires de recherche équilibrés
Un arbre binaire de recherche est une structure de donn ee qui permet de repr esen-ter un ensemble de valeurs si l’on dispose d’une relation d’ordre sur ces valeurs Les op erations caract eristiques sont l’insertion la suppression et la recherche d’une valeur Ces op erations sont peu cou^teuses si l’arbre n’est pas trop d es
ARBRES BINAIRES DE RECHERCHE - Université de Montréal
A l’aide d’un arbre de recherche on peut impl` ementer une table de symboles d’une´ maniere tr` es ef?cace ` Operations :´ recherche d’une valeur particuliere` insertion ou suppression d’une valeur recherche de min ou max et des autres Pour la discussion des arbres binaires de recherche on va considerer les pointeurs´
13 Table de symboles et arbres binaires de recherche
? tableau tri´e : recherche binaire — temps de (log n) au pire mais insertion/suppression en ( n) au pire cas 13 2 Arbre binaire de recherche (ABR) (fr) 9 6 12 3 8 11 15 1 4 7 19 chaque nœud interne poss`ede une cl ´e : les cl es sont´ comparables De?nition 13 1 ´ Dans un arbre binaire de recherche
Algo 2 séance 6 Arbres binaires de recherche (ABR (suite
Arbres binaires de recherche (ABR (suite) : suppression et arbres equilibr es Franck Hetroy et Denis Trystram mars 2017 1/37 ECOLE NATIONALE SUPERIEURE 1 / 37 D’INFORMATIQUE ET DE MATHEMATIQUES APPLIQUEES
Searches related to arbre binaire de recherche suppression PDF
Arbre binaire de recherche Un arbre binaire de recherche est un arbre binaire dans lequel chaque sommet est etiquet e par un couple (k;D) avec la propri et e suivante: I tous les sommets du sous-arbre gauche ont une cl e inf erieure a k droit ont une cl e sup erieure a k Exemple: 7 3 1 4 5 9 8 (Seules les cl es sont repr esent ees dans les
Comment définir un arbre binaire?
Un arbre binaire est : – soit l’arbre vide?; – soit un nœud A(g,r,d), où g désigne le sous-arbre gauche, d le sous-arbre droit, et r ? E les données satellites stockées dans le nœud. Dé?nition 2 (Arbre binaire de recherche).
Quand un arbre binaire est dit tasse ?
Un arbre binaire est dit tasse si Itous les niveaux sauf peut-^etre le dernier sont complets.
Comment reequilibrer un arbre ?
Iinserer, rechercher, supprimer, maximum, minimum s’eectuent en temps O(log n). Remarque: reequilibrer un arbre Iapres une insertion, en fait une seule rotation, ou double rotation sut. Iapres une suppression, il peut y avoir jusqu’a h rotations ou double rotations.
Comment supprimer la racine d'un sous-arbre ?
IOn supprime la racine du sous-arbre correspondant: static ArbresupprimerRacine(Arbre a) { //Castrivial&Facile if (a.gauche==null) return a.droite; if (a.droite==null) return a.gauche; //Casmoinsfacile Arbre g= maximum(a.gauche); return new Arbre(supprimer(g.k,a.gauche),g.k,g.D,a.droite);} 20 Complexite des algorithmes
Retrouvez éduscol sur
2 DE 1 RE T LEVOIE GÉNÉRALE
ENSEIGNEMENT
SPÉCIALITÉ
IMPLANTATION DES ARBRES BINAIRES DE
RECHERCHE À L"AIDE DE LA POO
Sommaire
ǁoeȧOEɀȪȸNJ 2
Structure permettant de définir un ABR 4
Affichage d"un ABR 5
5Visualisation graphique 6
Ajout d"un élément 8
Suppression d"un élément (hors programme) 8
eduscol.education.fr/ 2Retrouvez éduscol sur
ǁoeȧOEɀȪȸNJ
ont déjà été abordées. arbres binaires de recherche stocker un ensemble de donn ées ordonnées, potentiellement efficace pour certains algorithmes d"accès, d"insertion ou de suppression de données. Un ABR est un arbre dont les nuds comportent au plus 2 fils appelés fils gauchefils droit pour tout nud n valeur portée par le nud n valeur portée par le nud Un même ensemble ordonné peut être implanté par des arbres binaires différents. Prenons par exemple l"ensemble {2, 3, 5, 7, 9, 11, 13}. Il peut être implanté par les différents ABR suivants (liste non exhaustive) eduscol.education.fr/ 3Retrouvez éduscol sur
temps de certains algorithmes est par contre différente. Prenons le cas de la recherche d"un élément. La recherche se fait à partir de la racine de l"arbre, avec l"algorithme récursif suivant recherche (arbre, valeur) si arbre.valeur == valeur : renvoyer vrai sinon si valeur < arbre.valeur : si sous_arbre_gauche existe : renvoyer recherche(sous_arbre_gauche, valeur) sinon renvoyer faux sinon : si sous_arbre_droit existe : renvoyer recherche(sous_arbre_droit, valeur) sinon renvoyer faux recherché dans l"arbre. Si on définit à 1 la hauteur de la racine, le temps moyen de recherche est donc eduscol.education.fr/ 4Retrouvez éduscol sur
la solution 1. On comprend aisément qu"un arbre équilibré (solution 2) donne en moyenne de meilleurs résultats que tout autre arbre, et qu"un arbre dégénéré (solution 4) donne des résultats plus mauvais que toute autre représentation. La notion formelle d"arbre équilibré n"est pas au programme, mais elle peut être abordée intuitivement. Sur un ABR équilibré, la recherche d"un élément est en moyenne en log 2 (n), comme avec une recherche par dichotomie dans une liste. On peut alors se poser la question de l"intérêt d"utiliser un ABR. La réponse tient dans le temps mis à ajouter / supprimer un élément : dans une liste, on est en 0(n) (complexité linéaire), alors qu"on est en log 2 (n) dans un ABR (complexité logarithmique). Aussi, lorsqu"on doit stocker une collection d"éléments ordonnés, une liste Python peutêtre utilisée si la collection évolue peu ou bien si les éléments sont stockés dans l"ordre
du tri. Mais si la collection doit être régulièrement modifiée et que les recherches par rapport au critère de tri sont fréquentes, on privilégie les ABR. On peut ainsi utiliser des ABR pour gérer la liste des adhérents à une bibliothèque (la recherche est engénéral faite sur le nom). Mais cela est peut-être moins adapté à une liste de films où
la recherche peut être faite sur de nombreux critères différents (titre, acteurs, type, année de sortie, etc.).Nous allons maintenant aborder
En annexe, nous présentons le mécanisme AVL (Adelson-Veskill et Landis) permettant de maintenir des ABR relativement équilibrés lors de l"ajout et de la suppression d"un élément, mais cela ne fait pas partie du programme de NSI. représenter le premier arbre ci-dessus par le tuple suivant : (5, (2, None, 3), (11, (7, None, 9), 13)) en Python. Par ailleurs, le programme préciseL"exemple des arbres permet d"illustrer
la programmation par classe . C"est donc via des classes que l"implantation d"ABR est présentée dans ce document.Structure permettant de définir un ABR
class ABR: def __init__(self, racine = None): self.racine = racine class Nud: def __init__(self, valeur, noeud_gauche = None, noeud_droit = None) self.valeur = valeur self.noeud_gauche = noeud_gauche self.noeud_droit = noeud_droit eduscol.education.fr/ 5Retrouvez éduscol sur
à appréhender, d"autant plus que, comme souvent sur les structures récursives, les implantations les plus simples des algorithmes sont souvent des implantations récursives. Pour construire l"ABR du premier exemple ci-dessus, on peut procéder ainsiOn peut noter l"utilisation de
is None== None variable contient bien la valeur spéciale None afin de passer outre l"éventuelle redéfinition de l"opérateur d"égalité.Affichage d"un ABR
Visualisation texte
d"abord son sous-arbre gauche décalé de 2 espaces, puis son sous-arbre droit décalé de 2 espaces. Lorsqu"un nud n"a qu"un fils, le sous-arbre vide est représenté par un X afin de savoir l"unique fils est un fils gauche ou un fils droit. Pour les nuds feuille, on n"affiche pas de X pour les 2 sous-arbres vides. Le premier arbre donné ci-dessus est affiché ainsi n9 = Noeud(9) n7 = Noeud(7, None, n9) n13 = Noeud(13) n11 = Noeud(11,n7, n13) n3 = Noeud(3) n2 = Noeud(2, None, n3) n5 = Noeud(5, n2, n11) arbre = ABR(n5)Remarque sur la structure présentée
racine de l"arbre si celui-ci n"est pas vide. On peut donc rajouter à la classe ABR la méthode suivante def est_vide(self): return self.racine is None eduscol.education.fr/ 6Retrouvez éduscol sur
définit un méthode récursive to_stringNoeud des espaces dont le nombre est proportionnel à la profondeur du nud dans l"arbre. L"appel initial de cette méthode est effectué par la méthode __str__ABR Dans la représentation choisie, on représente les fils vides par des X, mais, dans le cas d"un nud feuille, on ne représente pas ses fils. On a donc besoin de rajouter les méthodes suivantes̬̽ABR
̬̽Noeud
On prend également soin de définir la variable INDENTATION ainsi dans notre fichier pythonVisualisation graphique
la bibliothèque graphviz représentation def __str__(self): if self.est_vide(): representation = "Arbre Vide !» else: representation = self.racine.to_string("») return representation def to_string(self, decalage): retour = decalage retour += str(self.valeur) + "\n» if self.est_feuille(): return retour if self.noeud_gauche is None: retour += decalage + INDENTATION + "X\n» else: retour += self.noeud_gauche.to_string(decalage + INDENTATIO N) if self.noeud_droit is None: retour += decalage + INDENTATION + "X\n» else: retour += self.noeud_droit.to_string(decalage + INDENTATION return retour def est_feuille(self): return self.noeud_gauche is None and self.noeud_droit is NoneINDENTATION = " " # indentation de 2 espaces
from graphviz import Digraph def visu(self): assert not(self.est_vide()) graphe = Digraph() self.racine.ajoute_noeud_visu(graphe) graphe.render("arbre», view=True) eduscol.education.fr/ 7Retrouvez éduscol sur
On obtient alors, pour le premier arbre donné en exemple, l"affichage suivant L"algorithme ayant déjà été donné dans l"introduction, voici son implantation via l"ajout de 2 méthodes̬̽ABR
def ajoute_noeud_visu(self, graphe, parent = None, etiquette = None noeud = str(self.valeur) graphe.node(nud) if not(parent is None): graphe.edge(parent, nud, label=etiquette) if not(self.noeud_gauche is None): self.noeud_gauche.ajoute_noeud_visu(graphe, nud, "<» if not(self.noeud_droit is None): self.noeud_droit.ajoute_noeud_visu(graphe, nud, ">» def rechercher(self, valeur): if self.est_vide(): trouve = False else: trouve = self.racine.rechercher(valeur) return trouve def rechercher(self, valeur): if self.valeur == valeur: return True elif valeur < self.valeur: if self.noeud_gauche is None: return False else: return self.noeud_gauche.rechercher(valeur) else: if self.noeud_droit is None: return False else: return self.noeud_droit.rechercher(valeur) eduscol.education.fr/ 8Retrouvez éduscol sur
TrueFalse
présente dans l"arbre ou pas. Si on souhaite renvoyer la donnée elle-même, il suffit de modifier ces méthodes pour renvoyer NoneFalseself.valeur place de TrueAjout d"un élément
Par ailleurs, si l"élément est déjà présent dans l"ABR, on ne l"ajoute pas. On va donc
parcourir l"ABR comme pour la recherche, mais si la branche que l"on doit parcourir est vide, c"est qu"on est arrivé à l"endroit où insérer la nouvelle valeur.On ajoute donc les 2 méthodes suivantes
Suppression d"un élément (hors programme)
problème : il suffit de le supprimer remplacer par ce fils la valeur à supprimer soit par l"élément le plus grand de son sous-arbre gauche (il est plus grand que tous les autres éléments à gauche par définition et, par construction, plus petit que tous les éléments à droite), soit par l"élément le plus petit de son sous-arbre droit (il est plus petit que tous les autres éléments à droite par définition et, par construction, plus grand que tous les éléments à gauche). C"est cette deuxième solution qui est présentée ici. def inserer(self, valeur): if self.est_vide(): self.racine = Nud(valeur) else: self.racine.inserer(valeur) def inserer(self, valeur): if valeur < self.valeur: if self.noeud_gauche is None: self.noeud_gauche = Noeud(valeur) else: self.noeud_gauche.inserer(valeur) elif valeur > self.valeur: if self.noeud_droit is None: self.noeud_droit = Noeud(valeur) else: self.noeud_droit.inserer(valeur) eduscol.education.fr/ 9Retrouvez éduscol sur
compliquée. Elle est d"ailleurs hors programme. Voici une implantation du processus, découpée en plusieurs méthodes pour rendre l"ensemble plus compréhensible̬̽ABR
̬̽Noeud
def supprimer(self, valeur): if self.est_vide(): return else: self.racine = self.racine.supprimer(valeur) def supprimer(self, valeur): if valeur < self.valeur: self.noeud_gauche = self.noeud_gauche.supprimer(valeur) return self elif valeur > self.valeur: self.noeud_droit = self.noeud_droit.supprimer(valeur) return self else: return self.supprimer_noeud_courant() def supprimer_noeud_courant(self): if self.est_feuille(): return None elif self.noeud_gauche is None: return self.noeud_droit elif self.noeud_droit is None: return self.noeud_gauche else: (valeur, nud) = self.noeud_droit.chercher_et_supprimer _min() self.valeur = valeur self.noeud_droit = nud return self def chercher_et_supprimer_min(self):quotesdbs_dbs13.pdfusesText_19[PDF] exercice corrigé arbre rouge et noir
[PDF] arbre binaire de recherche en c
[PDF] les arbres en c openclassroom
[PDF] arbre binaire de recherche algorithme
[PDF] arbre binaire de recherche algorithme suppression
[PDF] parcours en profondeur arbre
[PDF] arbre binaire complet
[PDF] dénombrement cours
[PDF] arbre de probabilité pile ou face
[PDF] arbre de probabilité seconde
[PDF] arbre probabilité conditionnelle
[PDF] arbre de décision exercices corrigés
[PDF] arbre de décision data mining
[PDF] cours arbre de décision