24
Chapitre VII. Arbres (suite) Arbres binaires 1

Chapitre VII. Arbres (suite) - Université de Bordeauxbenois-p/AlgoFondBasesProgMI... · 2019-09-09 · Arbres binaires de recherche • Objectif : ordonner par clés les informations

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Chapitre VII. Arbres (suite) - Université de Bordeauxbenois-p/AlgoFondBasesProgMI... · 2019-09-09 · Arbres binaires de recherche • Objectif : ordonner par clés les informations

Chapitre VII. Arbres (suite)

Arbres binaires

1

Page 2: Chapitre VII. Arbres (suite) - Université de Bordeauxbenois-p/AlgoFondBasesProgMI... · 2019-09-09 · Arbres binaires de recherche • Objectif : ordonner par clés les informations

•  Dans un arbre binaire un nœud peut avoir au plus deux fils

•  Fils Gauche (FG) •  Fils Droit (FD)

Définition (1)

1

2

4

56

7

8 9

2

Page 3: Chapitre VII. Arbres (suite) - Université de Bordeauxbenois-p/AlgoFondBasesProgMI... · 2019-09-09 · Arbres binaires de recherche • Objectif : ordonner par clés les informations

Définition (2)

•  La base : un arbre vide est un arbre binaire

•  La récurrence : si r est un nœud et si B1 et B2 sont des arbres binaires alors il existe un arbre binaire avec une racine r et un sous-arbre gauche B1 et un sous-arbre droit B2

•  Non-symétrie :

>=< 2,1, BBrB

>>∅∅<∅>≠<∅>∅∅<< ,,,,,,,, rrrr

6

1 1

6

3

Page 4: Chapitre VII. Arbres (suite) - Université de Bordeauxbenois-p/AlgoFondBasesProgMI... · 2019-09-09 · Arbres binaires de recherche • Objectif : ordonner par clés les informations

Structures de données pour les arbres binaires

•  Type PtrNoeud = ^Noeud Enregistrement Noeud

info : TypeInfo FilsGauche : PtrNoeud FilsDroit : PtrNoeud Fin Enregistrement;

info

info info

FG

FG FG

FD

FD FD

4

Page 5: Chapitre VII. Arbres (suite) - Université de Bordeauxbenois-p/AlgoFondBasesProgMI... · 2019-09-09 · Arbres binaires de recherche • Objectif : ordonner par clés les informations

Type abstrait Arbre Binaire

•  Type Arbre =PtrNoeud •  Signature •  Type Arbre •  Opérations •  Arbre-vide : ->Arbre •  <-,-,-> : PtrNoeud X Arbre X Arbre ->Arbre •  Racine: Arbre ->PtrNoeud •  FG : Arbre ->Arbre •  FD : Arbre ->Arbre •  contenu : PtrNoeud>Info •  est-vide? : Arbre ->Booléen

5

Page 6: Chapitre VII. Arbres (suite) - Université de Bordeauxbenois-p/AlgoFondBasesProgMI... · 2019-09-09 · Arbres binaires de recherche • Objectif : ordonner par clés les informations

Axiomes

•  Préconditions •  Racine(B) est-defini-ssi B<> arbre-vide •  G(B) est-defini-ssi B<> arbre-vide •  D(B) est-defini-ssi B<> arbre-vide •  Axiomes •  Racine(<r,B1,B2>)=r •  G(<r,B1,B2>)=B1 •  D(<r,B1,B2>)=B2

6

Page 7: Chapitre VII. Arbres (suite) - Université de Bordeauxbenois-p/AlgoFondBasesProgMI... · 2019-09-09 · Arbres binaires de recherche • Objectif : ordonner par clés les informations

•  Chaque nœud est soit une feuille soit d’un degré = 2

Arbres Binaires complets

1

2

4

56

7

8 9

1

4

56

7

8 9

7

Page 8: Chapitre VII. Arbres (suite) - Université de Bordeauxbenois-p/AlgoFondBasesProgMI... · 2019-09-09 · Arbres binaires de recherche • Objectif : ordonner par clés les informations

Un arbre complet d’arité 2

•  Cas particulier des arbres binaires complets : toutes les feuilles ont la même profondeur

1

4

56

7

8 9

1

4

56

7

8 98

Page 9: Chapitre VII. Arbres (suite) - Université de Bordeauxbenois-p/AlgoFondBasesProgMI... · 2019-09-09 · Arbres binaires de recherche • Objectif : ordonner par clés les informations

Un arbre complet d’arité 2

(1) Combien de feuilles y a–t-il dans un arbre complet d’arité 2 et de profondeur h?

•  Les feuilles sont les fils des nœuds à la profondeur h-1 •  La racine a 2 fils à la profondeur 1, chacun d’eux a 2 fils à la

profondeur 2,, •  2x2 •  Etc… •  Le nombre de feuilles est donc 2h

•  La hauteur d’un arbre complet comportant n feuilles est donc lg n

(2) Combien de nœuds internes ? •  1 – racine +2 +2x2 + …+ 2h-1 = 12

122

1

0 −

−=∑

=

hh

i

i

9

Page 10: Chapitre VII. Arbres (suite) - Université de Bordeauxbenois-p/AlgoFondBasesProgMI... · 2019-09-09 · Arbres binaires de recherche • Objectif : ordonner par clés les informations

Parcours des arbres binaires(1)

•  Parcours en profondeur •  Procédure Parcours(B: Arbre) •  Début

–  Si est-vide(B) alors Terminaison –  sinon –  Traitement 1 –  Parcours(FG(B)) –  Traitement 2 –  Parcours (FD(B)) –  Traitement 3 –  FSi FinParcours – 

10

Page 11: Chapitre VII. Arbres (suite) - Université de Bordeauxbenois-p/AlgoFondBasesProgMI... · 2019-09-09 · Arbres binaires de recherche • Objectif : ordonner par clés les informations

•  Procédure ParcoursPréfixe(B: Arbre) •  Début

–  Si est-vide(B) alors Terminaison –  sinon –  Traitement 1 –  Parcours(FG(B)) –  Parcours (FD(B)) FinParcours – 

Parcours en Ordre-« Préfixe »

1

4

56

7

8 9

1,6,5,7,4,8,9

« +ab »

11

Page 12: Chapitre VII. Arbres (suite) - Université de Bordeauxbenois-p/AlgoFondBasesProgMI... · 2019-09-09 · Arbres binaires de recherche • Objectif : ordonner par clés les informations

Ordre « Infixe » •  Procedure ParcoursInfixe(B: Arbre) •  Début

–  Si est-vide(B) alors Terminaison –  sinon –  Parcours(g(B)) –  Traitement 2 –  Parcours (d(B)) –  FSi FinParcours

1

4

56

7

8 9

6,1,7,5,8,4,9

« a+b »

12

Page 13: Chapitre VII. Arbres (suite) - Université de Bordeauxbenois-p/AlgoFondBasesProgMI... · 2019-09-09 · Arbres binaires de recherche • Objectif : ordonner par clés les informations

Ordre suffixe- postfixe

•  Procédure ParcoursSuffixe(B: Arbre) •  Début

–  Si est-vide(B) alors Terminaison –  sinon –  Parcours(FG(B)) –  Parcours (FD(B)) –  Traitement 3 –  FSi FinParcours

1

4

56

7

8 9

6,7,8,9,4,5,1 13

Page 14: Chapitre VII. Arbres (suite) - Université de Bordeauxbenois-p/AlgoFondBasesProgMI... · 2019-09-09 · Arbres binaires de recherche • Objectif : ordonner par clés les informations

Représentation des expressions arithmétiques

x

y

*

-

a b

+Expression usuelle:

x+(a-b)*y

14

Page 15: Chapitre VII. Arbres (suite) - Université de Bordeauxbenois-p/AlgoFondBasesProgMI... · 2019-09-09 · Arbres binaires de recherche • Objectif : ordonner par clés les informations

Représentation des expressions arithmétiques

x

y

*

-

a b

+Préfixe

+ x * - a b y

+ (x)(*-aby)

(*(-(a)(b))(y))

Chaque opérateur précède ces deux opérandes

15

Page 16: Chapitre VII. Arbres (suite) - Université de Bordeauxbenois-p/AlgoFondBasesProgMI... · 2019-09-09 · Arbres binaires de recherche • Objectif : ordonner par clés les informations

Représentation des expressions arithmétiques

x

y

*

-

a b

+Postfixe

x a b – y * +

(x)(ab-y*)+

(ab-)(y)*

(a)(b)-

Chaque opérateur est précédé par ces deux opérandes 16

Page 17: Chapitre VII. Arbres (suite) - Université de Bordeauxbenois-p/AlgoFondBasesProgMI... · 2019-09-09 · Arbres binaires de recherche • Objectif : ordonner par clés les informations

Représentation des expressions arithmétiques

x

y

*

-

a b

+Infixe

x+a-b*y

Ambigüité!

Ajouter systématiquement les parenthèses aux expressions

17

Page 18: Chapitre VII. Arbres (suite) - Université de Bordeauxbenois-p/AlgoFondBasesProgMI... · 2019-09-09 · Arbres binaires de recherche • Objectif : ordonner par clés les informations

Arbres binaires de recherche

•  Objectif : ordonner par clés les informations stockées. •  Les opérations : recherche, min, max, prédécesseur, successeur,

insérer, supprimer. •  Dans le meilleur de cas la complexité de ces opérations est •  Dans le pire des cas , n – nombre de nœuds

•  Propriété fondamentale : •  B: ABR, x –nœud •  SAG : sous-arbre gauche de racine r=x •  SAD: sous-arbre droit de racine r=x •  Si •  Si

( )nΘ

Θ lg n( )

][][)( xcléycléxSAGy ≤⇒∈

][][)( xcléycléxSADy ≥⇒∈

5

3 7

18

Page 19: Chapitre VII. Arbres (suite) - Université de Bordeauxbenois-p/AlgoFondBasesProgMI... · 2019-09-09 · Arbres binaires de recherche • Objectif : ordonner par clés les informations

ABR : quelques opérations

•  Pb : Imprimer toutes les clés dans l’ordre croissant •  Solution : parcours Infixe (FG, r, FD) •  Procedure ParcoursInfixe (x: Arbre) •  Debut

–  Si x<>Nil –  alors –  ParcoursInfixe(FG(x)) –  imprimer (clé(x)) –  ParcoursInfixe(FD(x)) –  FSi –  Fin ParcoursInfixe

7

6

3

52 8

Résultat : 2 3 5 6 7 8 19

Page 20: Chapitre VII. Arbres (suite) - Université de Bordeauxbenois-p/AlgoFondBasesProgMI... · 2019-09-09 · Arbres binaires de recherche • Objectif : ordonner par clés les informations

Recherche dans un ABR(1)

•  Problème : rechercher un nœud ayant une clé donnée. •  La fonction renvoie NIL si la clé ne se trouve pas dans l’arbre ou

le pointeur sur le nœud qui contient la clé. •  Fonction RechercheABR (A: PtrNoeud, k: entier):PtrNoeud •  Debut

–  Si est-vide(A) ou k=clé[A] –  alors retourner A –  sinon –  Si k< clé(A) –  alors retourner RechercheABR(FG(A),k) –  sinon retourner RechercheABR(FD(A),k) –  FSi –  FSi Fin recherche

Complexité la hauteur de l’arbre −Θ hh),( 20

Page 21: Chapitre VII. Arbres (suite) - Université de Bordeauxbenois-p/AlgoFondBasesProgMI... · 2019-09-09 · Arbres binaires de recherche • Objectif : ordonner par clés les informations

Recherche dans un ABR(2)

•  Algorithme itératif •  Fonction RechercheIterABR(A: PtrNoued, k: entier) :

PtrNoeud •  Début

–  TQ A<>NIL et clé(A)<>k faire •  Si k<clé(A)

alors A:= FG(A) sinon A:=FD(A)

FSi FTQ FinRechercheIterABR

21

Page 22: Chapitre VII. Arbres (suite) - Université de Bordeauxbenois-p/AlgoFondBasesProgMI... · 2019-09-09 · Arbres binaires de recherche • Objectif : ordonner par clés les informations

MinMax dans un ABR

Min : aller toujours à gauche jusqu'à atteindre le dernier FG – feuille { les test est-vide(A) =faux} Tq FG(A)< > Nil A:=FG(A) FTq retourner contenu(A) Max : réciproque { les test est-vide(A) =faux} Tq FD(A)< > Nil A:=FD(A) FTq retourner contenu(A)

22

Page 23: Chapitre VII. Arbres (suite) - Université de Bordeauxbenois-p/AlgoFondBasesProgMI... · 2019-09-09 · Arbres binaires de recherche • Objectif : ordonner par clés les informations

Insertion dans les ABRs Procédure Insérer(val x : Type Info, réf A: PtrNœud ) Debut Si A=Nil alors new A A^.info:=x; A^.FilsG:=Nil; A^.FilsD:=Nil; sinon Si x<A^.info alors Insérer(x, A^.FilsG) sinon Si x>A^.Info alors Insérer(x, A^.FilsD) sinon FSi FSi

FSi FinInsérer

23

Page 24: Chapitre VII. Arbres (suite) - Université de Bordeauxbenois-p/AlgoFondBasesProgMI... · 2019-09-09 · Arbres binaires de recherche • Objectif : ordonner par clés les informations

Suppression dans un ABR

•  Supprimer le nœud contenant la clé X donnée •  La relation d’ordre doit être préservée •  (1) Si c’est un nœud sans fils – la suppression est

immédiate •  (2) Si c’est un nœud qui a un seul fils, il suffit de

remplacer le noeud par ce fils •  (3) Si c’est un nœud qui a deux fils, alors remplacer le

nœud contenant l’élément à supprimer par celui qui lui est immédiatement inférieur(qui contient le plus grand élément de son sous-arbre gauche).

24