• Aucun résultat trouvé

Arbre Binaire de Recherche Programmation Fonctionnelle Master 2 I2L apprentissage

N/A
N/A
Protected

Academic year: 2022

Partager "Arbre Binaire de Recherche Programmation Fonctionnelle Master 2 I2L apprentissage"

Copied!
20
0
0

Texte intégral

(1)

Arbre Binaire de Recherche

Programmation Fonctionnelle Master 2 I2L apprentissage

S´ebastien Verel verel@lisic.univ-littoral.fr

http://www-lisic.univ-littoral.fr/~verel

Universit´e du Littoral Cˆote d’Opale Laboratoire LISIC Equipe OSMOSE

Novembre 2015

(2)

Introduction

D´ efinition

12

7 20

10 26

7

11 22 8

Arbre Binaire de Recherche (ABR)

Arbre binaire o`u pour tous les noeuds, les ´etiquettes (cl´es) de l’arbre de gauche sont inf´erieures (ou ´egale) `a l’´etiquette du noeud et les ´etiquettes de l’arbre droit sont strictement plus sup´erieures.

(3)

Introduction

Type de donn´ ees abstrait

Op´erations de base sur les ABR Insertion d’un ´el´ement Suppression d’un ´el´ement Recherche d’un ´el´ement

Exercice

Impl´ementer le TDA.

Remarque 1 : la suppression est le plus difficile `a r´ealiser.

Remarque 2 : il est bon d’avoir une fonction d’affichage pour les tests.

(4)

Introduction

Type de donn´ ees abstrait

Op´erations de base sur les ABR Insertion d’un ´el´ement Suppression d’un ´el´ement Recherche d’un ´el´ement

Exercice

Impl´ementer le TDA.

Remarque 1 : la suppression est le plus difficile `a r´ealiser.

Remarque 2 : il est bon d’avoir une fonction d’affichage pour les tests.

(5)

Introduction

Suppression simple

La suppression du nombre 12 `a la racine peut donner :

12

7 20

10 26

7

22 11

8

11

7 20

10 26

7

22 8

(6)

Introduction

Complexit´ e

Complexit´e des op´erations pr´ec´edentes Pour un arbre binaire de taillen,

la complexit´e dans le pire des cas (i.e. le peigne) est :

O(n) Pour un arbre binaire´equilibr´e de taillen, la complexit´e dans le pire des cas est :

O(log(n))

L’insertion et la suppression doivent maintenir la propri´et´e d’arbre

´equilibr´e...

(7)

Introduction

Complexit´ e

Complexit´e des op´erations pr´ec´edentes Pour un arbre binaire de taillen,

la complexit´e dans le pire des cas (i.e. le peigne) est : O(n)

Pour un arbre binaire´equilibr´e de taillen, la complexit´e dans le pire des cas est :

O(log(n))

L’insertion et la suppression doivent maintenir la propri´et´e d’arbre

´equilibr´e...

(8)

Introduction

Complexit´ e

Complexit´e des op´erations pr´ec´edentes Pour un arbre binaire de taillen,

la complexit´e dans le pire des cas (i.e. le peigne) est : O(n)

Pour un arbre binaire´equilibr´e de taillen, la complexit´e dans le pire des cas est :

O(log(n))

L’insertion et la suppression doivent maintenir la propri´et´e d’arbre

´equilibr´e...

(9)

Introduction

Arbre AVL

Arbre presque ´equilibr´e

Un arbre est presque ´equilibr´e si pour tous sous-arbres la diff´erence de hauteur entre l’arbre de gauche et l’arbre de droite est au plus une unit´e.

Arbre AVL

Arbre AVL : arbre automatiquement ´equilibr´e,

la propri´et´e d’arbre presque ´equilibr´e est maintenue lors de l’insertion et la suppression.

Invent´e en 1962 par Georgii Adelson-Velsky et Evguenii Landis (d’o`u AVL)

(10)

Introduction

Principes

L’insertion et la suppression utilisent la rotation `a gauche et `a droite d’un arbre lorsqu’il est trop d´es´equilibr´e :

Rotation Gauche

−−−−−−−−−−−→

(11)

Introduction

Principes

L’insertion et la suppression utilisent la rotation `a gauche et `a droite d’un arbre lorsqu’il est trop d´es´equilibr´e :

Rotation Droite

←−−−−−−−−−−

Exercice

D´efinir les fonctionsrg etrdqui permettent les rotations `a gauche et `a droite d’un arbre.

(12)

Introduction

Principes

L’insertion et la suppression utilisent la rotation `a gauche et `a droite d’un arbre lorsqu’il est trop d´es´equilibr´e :

Rotation Droite

←−−−−−−−−−−

Exercice

D´efinir les fonctionsrget rdqui permettent les rotations `a gauche et `a droite d’un arbre.

(13)

Introduction

Rotation ` a gauche

rg(A) ->

case arbreEstVide(A) of true ->

arbreVide() ; false ->

Ad = arbreDroit(A), arbreCons(

racine(Ad), arbreCons(

racine(A), arbreGauche(A), arbreGauche(Ad)), arbreDroit(Ad)) end.

(14)

Introduction

Rotation ` a gauche

rg(A) ->

case arbreEstVide(A) of true ->

arbreVide() ; false ->

Ad = arbreDroit(A), arbreCons(

racine(Ad), arbreCons(

racine(A), arbreGauche(A), arbreGauche(Ad)), arbreDroit(Ad)) end.

(15)

Introduction

Rotation ` a droite

rd(A) ->

case arbreEstVide(A) of true ->

arbreVide() ; false ->

Ag = arbreGauche(A), arbreCons(

racine(Ag), arbreGauche(Ag), arbreCons(

racine(A), arbreDroit(Ag), arbreDroit(A))) end.

(16)

Introduction

Rotation ` a droite

rd(A) ->

case arbreEstVide(A) of true ->

arbreVide() ; false ->

Ag = arbreGauche(A), arbreCons(

racine(Ag), arbreGauche(Ag), arbreCons(

racine(A), arbreDroit(Ag), arbreDroit(A))) end.

(17)

Introduction

Insertion

Principe

Ins´erer le nombre au bon endroit, le noeudN

Au fur et `a mesure de la remont´ee, deN `a la racine, r´e´equilibrer l’arbre en effectuant les rotations convenables.

(18)

Introduction

Insertion

A : arbre courant, Ag : arbre gauche de A, Ad : arbre droit de A, Agg : arbre gauche de Ag, Agd : arbre droit de Ag, Adg : arbre gauche de Ad, Add : arbre droit de Ad.

Principe du r´e´equilibrage en chaque du retour `a la racine

si|hauteur(Ag) - hauteur(Ad)|>1alors sihauteur(Ag) - hauteur(Ad)= 2alors

sihauteur(Agg)>hauteur(Agd)alors rd(A)

sinon

rg(Ag)puisrd(A) fin si

sinon

sihauteur(Add)>hauteur(Adg)alors rg(A)

sinon

rd(Ad)puisrg(A) fin si

fin si fin si

(19)

Introduction

Insertion

Attention

Il faut changer le TDA pour enregistrer la hauteur de chaque noeud, sinon la complexit´e devient catastrophique...

(20)

Introduction

Suppression

Principe

Mˆeme principe que l’insertion

Supprimer le nombre au bon endroit, le noeud N Au fur et `a mesure de la remont´ee, deN `a la racine, r´e´equilibrer l’arbre en effectuant les rotations convenables.

Références

Documents relatifs

´ el´ ements plus petit que l’´ etiquette sont dans l’arbre gauche et tous les ´ el´ ements plus grand que l’´ etiquette sont dans l’arbre droit. searchOrd :: (Ord a) =>

Motif : expression compos´ e de variables libres ou li´ ees, ainsi que des valeurs litt´ erales (atomes, entiers ou chaines) Expression : expression compos´ e de structures de

Est-il possible de r´ esoudre le probl` eme ` a l’aide de la r´ esolution du probl` eme portant sur une (des) ”plus petite(s)” valeur(s) du param` etre. Si oui,

Connaitre le sch´ ema r´ ecursif du traitement d’une liste Connaitre les algorithmes classiques relatifs aux listes Savoir ´ ecrire une fonction de calcul avec accumulateur, de

Calcul consiste en l’´ evaluation d’une fonction pour ´ eviter toute modification ”d’´ etats”.. R´ esultat d´ epend seulement des entr´ ees et non pas de l’´ etat

´ el´ ements plus petit que l’´ etiquette sont dans l’arbre gauche et tous les ´ el´ ements plus grand que l’´ etiquette sont dans l’arbre droit. rechercheOrd( _, {arbre}

Complexit´ e des op´ erations pr´ ec´ edentes Pour un arbre binaire de taille n,. la complexit´ e dans le pire des

d- En supposant qu’il existe une fonction point/2 qui permette de dessiner un point de coordonn´ ees (x, y), d´ efinir une fonction qui dessine la repr´ esentation graphique