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

Chapitre VI. Arbres (définition, parcours, représentation) Chapitre VI.1. Arbres généraux.

Présentations similaires


Présentation au sujet: "Chapitre VI. Arbres (définition, parcours, représentation) Chapitre VI.1. Arbres généraux."— Transcription de la présentation:

1 Chapitre VI. Arbres (définition, parcours, représentation) Chapitre VI.1. Arbres généraux

2 Introduction Les structures arborescentes jouent un rôle important dans lorganisation de données - indexes des Bases de Données sont organisés sous forme des arbres afin de segmenter la mémoire et de réduire le temps daccès aux données. -dans ce chapitre nous étudions lobjet « arbre » et proposons différentes stratégies de son exploration

3 Arbres(1) Un arbre peut être défini comme un ensemble des points, appelé des nœuds et un ensemble de lignes appelées des arcs, ou un arc relie deux nœuds distincts. Propriétés : (1) Il existe un nœud particulier appelé la racine (2) Tout nœud c autre que racine est relié par un arc à un autre nœud p appelé le père de c (3) Un arbre est qualifié de connexe car si nous commençons à nimporte quel nœud n autre que la racine et nous nous déplaçons vers le père de n, puis vers le père du père de n et ainsi de suite, nous atteindrons certainement la racine de larbre.

4 Arbres Exemple Huges Capet Adélaïde dAquitaine Robert II Constance de Provence Henri Ier Anne de Kiev « Jaroslavna » Huges le Grand Philippe Ier Berthe de Hollande Robert Sans terre

5 La définition récursive des arbres La base : Un nœud seul n est un arbre. On dit que n est la racine de cet arbre à un nœud La récurrence : soit r un nouveau nœud et soient T1, T2, …,Tk des arbres ayant respectivement pour racines c1,c2,…,ck. Nous demandons à ce quaucun nœud napparaisse plus dune fois dans les Ti ; r étant un nouveau nœud, il ne peut pas apparaître dans un de ces arbres. Nous formons un nouvel arbre T à partir de r et de T1, T2,…,Tk : 1. Faire de r la racine de larbre T 2. Ajouter un arc entre r et chacun des c1,c2,…ck, de manière que chacun de ces nœuds soit un fils de la racine r

6 Chemins, ancêtres et descendants(1) Supposons que m1,m2,…,mk soit une séquence de nœuds telle que m1=père(m2), m2=père(m3)…mk-1=père (mk) Alors m1, m2,…,mk est appelée « chemin depuis m1 jusquà mk » dans larbre L=k-1 – longueur du chemin Illustration graphique

7 Chemins, ancêtres et descendants(2) m1 est lancêtre de mk mk est descendant de m1 Si L(m1,.., mk)>=1 alors m1 est ancêtre propre de mk et mk est descendant propre de m1 Sous-arbre : dans un arbre T un nœud n accompagné de tous ses descendants propres (si il en possède) est appelé un sous-arbre de T. Si père(ni)=père(nj), ni, nj sont appelé frères. Feuille : un nœud dun arbre qui na pas de fils Nœuds intérieurs : ceux qui ont au moins un fils

8 Mesures sur les arbres(1) Le nombre de fils dun nœud n dans un arbre est appelé le degré de n. Lexistence de la racine donne une orientation aux arbres d(n)=4

9 Mesures sur les arbres (2) La profondeur dun nœud n p(n) : la longueur du chemin depuis la racine jusquà n La hauteur dun nœud n h(n) : la longueur du plus long chemin depuis n jusquà une feuille r h(n)=2, p(n)=2 n

10 Mesures sur les arbres (3) p(r)=0 p(n)=p(q) +1 si q=père(n) La hauteur ou la profondeur dun arbre h(T) = max{h(n): n nœud de T} La longueur de cheminement La longueur du cheminement externe La longueur du cheminement interne

11 Arbres comme structures de données Arbres avec des nœuds étiquetés par des entiers 1,…,N Codage par tableau « père » :taille N

12 Codage par tableau « père » 1. Est-feuille (n)? 2. p(n)? 3. h(T)?

13 Représentation des arbres avec des tableaux de pointeurs info p1p2pbf pbf : facteur darborescence = le nombre maximal de fils que peut avoir un noeud

14 Représentation des arbres avec des tableaux de pointeurs(2) Type PtrNoeud = ^Noeud Enregistrement Noeud info : TypeInfo enfants : Tableau[1,…bf] de PtrNoeud Fin Enregistrement; Déclaration dun arbre : MonA : PtrNoeud { pointeur vers la racine} Le temps daccès au i-ème fils de nimporte quel nœud en O(1). Linconvénient : gaspillage de lespace mémoire.

15 Représentation des arbres avec des tableaux de pointeurs(3) Fils-aîné-frère-droit: info pour un nœud autre que la racine

16 Représentation des arbres avec des tableaux de pointeurs(4) Type PtrNoeud = ^Noeud Enregistrement Noeud info : TypeInfo fils_ainé : PtrNoeud frere_droit : PtrNoeud Fin Enregistrement;

17 Parcours des arbres (3) Un arbre peut être vu comme T1,…,Tk est un ensemble des arbres disjoints – « forêt » Du fait quil y a toujours un nœud (r) un arbre nest jamais vide

18 Parcours des arbres(1) Procédure Parcours(A: PtrNoeud) Var i,nb : entiers Début nb:=NbrFils(A) Si feuille(A) alors TraitementTerminal sinon TraitementPref {traitement avant de voir les fils} Pour i de 1 à nb faire Parcours(ième(Liste-Fils),i) Traitement(i) {*} FinPour TraitementSuf{traitement après avoir vu tous les fils} FSi FinParcours

19 Parcours des arbres(2) 1. Lordre Prefixe : chaque nœud nest pris en compte que lors du premier passage: TraitementPref et TraitementTerminal sont actifs, les autres ne font rien. 2. Lordre suffixe : chaque nœud nest pris en compte que lors du dernier passage : TraitementSuff et TraitementTerminal sont actifs, les autres ne font rien.

20 Parcours des arbres(3) Parcours dun arbre général

21 Exemple(1) : Affichage de contenu dun arbre généalogique en parcours préfixe Procédure AffichePref(A: PtrNoeud) Var i,nb : entiers Début nb:=NbrFils(A) Si feuille(A) alors affiche(«info + plus de descendance ») sinon affiche(info) {TraitementPref : traitement avant de voir les fils} Pour i de 1 à nb faire Parcours(ième(Liste-Fils),i) FinPour FSi FinParcours

22 Primitives sur les arbres Type Arbre =PtrNoeud Type Forêt = Liste de PtrNoeud Signature Type Arbre, Forêt Opérations Cons : PtrNoeud X Forêt ->Arbre Racine: Arbre ->PtrNoeud List-arbres: Arbre ->Forêt Forêt-vide: ->Forêt Ième : Forêt X Entier->Arbre Nb-arbres : Forêt->Entier Insérer : Forêt X EntierXArbre->Forêt, …

23 Axiomes Précondition Insérer (F,i,A) est definie ssi Axiomes Racine(cons(o,F))=o List-arbres(cons(o,F))=F Nb-arbres(forêt-vide)=0 nb- arbres(insérer(F,i,A)=nb-arbres(F)+1 1 ième(insérer(F,i,A),k)=ième(F,k) K=i->ième(insérer(F,i,A),k)=A i+1 ième(insérer(F,i,A),k)=ième(F,k-1) {décalage}

24 Mise en œuvre des primitives Représentation avec les tableau des pointeurs Type PtrNoeud = ^Noeud Enregistrement Noeud info : TypeInfo enfants : Tableau[1,…bf] de PtrNoeud Fin Enregistrement; Primitive Insérer : Forêt X Entier X Arbre->Forêt Procedure Inserer (ref EnfantsDuNoeud : Tableau [1…bf] de PtrNoeud, i:entier, A : PtrNoeud) Debut Var j:entier Si i>0 et i

25 Exemple(2) Supposons arbre généalogique avec lordre de la descendance selon primarité Ecrire la procédure dajout du fils cadet au dernier représentant de la lignée principale

26 Type PtrNoeud = ^Noeud Enregistrement Noeud info : TypeInfo enfants : Tableau[1,…bf] de PtrNoeud Fin Enregistrement; Procedure AjoutLePlusJeuneLD(Agen : PtrNoeud, FilsCadet : PtrNoeud) Début {Arbre nest jamais vidé !} Si Agen.^enfants[1]=NIL { Base de récursivité 1 – le dernier descendant de la LD na pas de fils} alors Insérer(Agen.^enfants,1,FilsCadet) sinon {Agen.^enfants[1]<>NIL} Si Agen.^enfants[1].^enfants[1]=NIL {Base de récursivité 2- le dernier descendant de la LD a des fils} alors j=1 TQ(j NIL) j:=j+1; FTQ Si (j

27 Mise en œuvre des primitives Fils-aîné-frère droit Fonction ième(NFA: PtrNoeud, FD: PtrNoeud, i: entier):PtrNoeud Var k : entier ptr : PtrNoeud Debut Si i=1 alors retourner NFA sinon ptr:=FD; k:=3; Tq ptr<>NIL et k


Télécharger ppt "Chapitre VI. Arbres (définition, parcours, représentation) Chapitre VI.1. Arbres généraux."

Présentations similaires


Annonces Google