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

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

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

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

Chapitre VI. Arbres (définition, parcours, représentation)

Chapitre VI.1. Arbres généraux

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

Introduction

• Les structures arborescentes jouent un rôle important dans l’organisation 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 d’accès aux données.

• -dans ce chapitre nous étudions l’objet « arbre » et proposons différentes stratégies de son exploration

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

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 à

n’importe 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 l’arbre.

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

Arbres Exemple

Huges Capet 939-996

Adélaïde d’Aquitaine

Robert II 970-1031

Constance de Provence

Henri Ier 1008-1060

Anne de Kiev « Jaroslavna »

Huges le Grand Philippe Ier 1053-1108

Berthe de Hollande

Robert Sans terre

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

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 qu’aucun nœud n’apparaisse plus d’une 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 l’arbre 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

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

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 l’arbre

• L=k-1 – longueur du chemin

• Illustration graphique

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

Chemins, ancêtres et descendants(2)

• m1 est l’ancê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 d’un arbre qui n’a pas de fils• Nœuds intérieurs : ceux qui ont au moins un

fils

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

Mesures sur les arbres(1)

• Le nombre de fils d’un nœud n dans un arbre est appelé le degré de n.

• L’existence de la racine donne une orientation aux arbres

d(n)=4

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

Mesures sur les arbres (2)

• La profondeur d’un nœud n p(n) : la longueur du chemin depuis la racine jusqu’à n

• La hauteur d’un nœud n h(n) : la longueur du plus long chemin depuis n jusqu’à une feuille

r

h(n)=2, p(n)=2n

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

Mesures sur les arbres (3)

• p(r)=0• p(n)=p(q) +1 si q=père(n)• La hauteur ou la profondeur d’un 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

TNnnhTLC ,)(

ffilsTNffhTLCE ,)(

nfilsTNnnhTLCE ,)(

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

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

1

2

3

4

56

7

8 9

1 2 3 4 5 6 7 8 9

0 9 1 5 1 1 5 4 4

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

Codage par tableau « père »

• 1. Est-feuille (n)?• 2. p(n)?• 3. h(T)?

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

Représentation des arbres avec des tableaux de pointeurs

info

info

info

info

p1 p2 pbf

pbf : facteur d’arborescence = le nombre maximal de fils que peut avoir un noeud

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

Représentation des arbres avec des tableaux de pointeurs(2)

• Type PtrNoeud = ^NoeudEnregistrement Noeud

info : TypeInfo enfants : Tableau[1,…bf] de PtrNoeudFin Enregistrement;

Déclaration d’un arbre : MonA : PtrNoeud { pointeur vers la racine}Le temps d’accès au i-ème fils de n’importe quel nœud

en O(1). L’inconvénient : gaspillage de l’espace mémoire.

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

Représentation des arbres avec des tableaux de pointeurs(3)

• Fils-aîné-frère-droit:

info info info

info

pour un nœud autre que la racine

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

Représentation des arbres avec des tableaux de pointeurs(4)

• Type PtrNoeud = ^NoeudEnregistrement Noeud

info : TypeInfo

fils_ainé : PtrNoeud

frere_droit : PtrNoeud

Fin Enregistrement;

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

Parcours des arbres (3)

• Un arbre peut être vu comme

• T1,…,Tk est un ensemble des arbres disjoints – « forêt »

• Du fait qu’il y a toujours un nœud (r) un arbre n’est jamais vide

TkTTrT ,....,2,1,

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

Parcours des arbres(1) • Procédure Parcours(A: PtrNoeud)• Var i,nb : entiers• Début

nb:=NbrFils(A)Si feuille(A) alors TraitementTerminal

sinonTraitementPref {traitement avant de voir les fils}

Pour i de 1 à nb faire Parcours(ième(Liste-Fils),i) Traitement(i) {*} FinPourTraitementSuf{traitement après avoir vu tous les fils}FSiFinParcours

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

Parcours des arbres(2)

• 1. L’ordre Prefixe : chaque nœud n’est pris en compte que lors du premier passage: TraitementPref et TraitementTerminal sont actifs, les autres ne font rien.

• 2. L’ordre suffixe : chaque nœud n’est pris en compte que lors du dernier passage : TraitementSuff et TraitementTerminal sont actifs, les autres ne font rien.

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

Parcours des arbres(3)

• Parcours d’un arbre général

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

Exemple(1) : Affichage de contenu d’un 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 »)

sinonaffiche(info) {TraitementPref : traitement avant de voir

les fils} Pour i de 1 à nb faire

Parcours(ième(Liste-Fils),i)FinPourFSiFinParcours

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

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,• …

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

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<k<i->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<k<1+nb-arbres(F)->• ième(insérer(F,i,A),k)=ième(F,k-1) {décalage}

)(11 Farbresnbi

)(11 Farbresnbi

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

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<bf+1 alors

Pour j de i à bf-1

EnfantsDuNoeud[j+1]:=EnfantsDuNoeud[j];

FPour { j pointe sur la première case vide du tableau des pointeurs}

EnfantsDuNoeud[i]=A;

Fin-Si

FinInserer

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

Exemple(2)

• Supposons arbre généalogique avec l’ordre de la descendance selon primarité

• Ecrire la procédure d’ajout du fils cadet au dernier représentant de la lignée principale

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

• Type PtrNoeud = ^Noeud

Enregistrement Noeud

info : TypeInfo

enfants : Tableau[1,…bf] de PtrNoeud

Fin Enregistrement;

Procedure AjoutLePlusJeuneLD(Agen : PtrNoeud, FilsCadet : PtrNoeud)

Début

{Arbre n’est jamais vidé !}

Si Agen.^enfants[1]=NIL { Base de récursivité 1 – le dernier descendant de la LD n’a 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<nbf et Agen.^enfants[j]<>NIL) j:=j+1; FTQ

Si (j<nbf) alors { Test de capacité du mémoire réservé}

Insérer(Agen.^enfants,j,FilsCadet)

FSi

sinon

AjoutLePlusJeuneL(Agen.^enfants[1],FilsCadet)

FSi

FSi

FinAjoutLePLusJeuneLD

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

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<i faire ptr:=ptr.FD; k++; FtqFSiRetourner ptr;Fin ième

info

info

info

info

NFA