Explorer les Livres électroniques
Catégories
Explorer les Livres audio
Catégories
Explorer les Magazines
Catégories
Explorer les Documents
Catégories
Hafidi Imad
ENSAK
Arbres
Un arbre est une structure de donnes organises de faon hirarchique, partir dun nud distingu appel racine. Trs importante en informatique!. Arbre de jeux (i.e., Echecs ), systme de fichiers UNIX/Windows, Arbres de tri etc.
Dfinition
Algorithmique Un arbre est une structure de donnes organises de faon hirarchique, partir dun nud distingu appel racine. Un lment quelconque peut avoir plusieurs successeurs, mais un seul prdcesseur. Seul le premier lment na pas de prdcesseur.
noeuds
artes
3
Arbres: dfinitions
Un arbre est un ensemble de Nuds, relis par des Artes. Entre deux nuds il existe toujours un seul chemin.
noeuds
artes
4
Terminologie
Les lments
Un sommet ou nud est un lment quelconque dun arbre. La racine est lunique sommet nayant pas de prdcesseur. Une feuille ou nud terminal est un lment nayant pas de successeur. Le prdcesseur unique dun nud est appel le pre. Les successeurs dun nud sont appels les fils. Les nuds qui ont le mme pre sont appels frres. Le frre place le plus a gauche est laine.
Les chemins
Un arte est un chemin reliant deux nuds Une branche est un chemin reliant la racine a une feuille.
Arbres: dfinitions
Les arbres sont enracins. Une fois la racine dfinit tous les nuds admettent un niveau. Les arbres ont des nuds internes et des feuilles (nuds externes). Chaque nud ( lexception de la racine) a un parent et admet zro ou plusieurs fils.
racine niveau 0 niveau 1 niveau 2 niveau 3 feuilles parent et fils
6
nuds internes
Arbres binaires
Un Arbre Binaire est un arbre o chaque nud admet au plus 2 fils.
10 8 7 9 11 12 13 15
16 18
8
1 14 2 10 4 8 8 7 9 10 9 11 13 12 5 6 15 11 3 16 7 18
1 tab A: 14
2 10
4 16 8
6 12
8 9 15 18
10 11 7 9 11 13
10
11
Parcours : inOrdre
InOrdre est dcrit rursivement : Visiter le sous-arbre gauche en InOrdre Visiter la racine Visiter le sous-arbre droit en InOrdre
12
Parcours : prOrdre
PrOrdre est dcrit rursivement : Visiter la racine Visiter le sous-arbre gauche en PrOrdre Visiter le sous-arbre droit en PrOrdre
13
Parcours: postOrdre
PostOrdre est dcrit rursivement : Visiter le sous-arbre gauche en PostOrdre Visiter le sous-arbre droit en PostOrdre Visiter la racine
14
15
10 8 11 15
16
16
ABR: InOrdre
Exemple: InOrdre visites : 14 (8) (10) (11) (14) (15) (16) (18)
10 8 11 15
16 18
18
Exemple:
14
10 8 11 15
16
Exemple:
10
8 3 2 5 9
ajout 4?
4
21
1) Ajouter C
2) ajouter A
C A
C L
5) Ajouter M
C A L
Ajout de : C A B L M
C A B L M
InOrdre affichage: A B C L M
24
x
supprimer x
r On obtient un ABR
25
r x
q q L On obtient un ABR
26
suppr x
suppr x u q s Z
suppr x
q est infrieur au plus petit lment de Z r est suprieur au plus grand lment de W
Analyse de la complxit : On est intrss par la complxit dans le meilleur cas, pire cas.
29
(h =3)
31
-1
CQFD!
33
car
35
Pourquoi?
37
Arbre AVL
Arbre AVL (Adelson-Velskii et Landis):
Le meilleur ABR maintenant tout moment un arbre raisonnablement quilibr. Ide : si linsertion ou la suppression provoque un dsquilibre de larbre, rtablir lquilibre. Toutes les oprations insertion, suppression, sur un arbre AVL avec N nuds en O(log N) (en moyenne et dans le pire cas!)
38
Arbre AVL
ABR tq. la diffrence des hauteurs du sous-arbre gauche et droite de la racine est dau plus 1 et les sous-arbres gauche et droit sont des AVL.
Exemple:
39
16
10
14
16
10
14
16
10
14
13
Arbres AVL
Il faut, aprs chaque insertion ou retrait, rtablir lquilibre sil a t rompu par lopration Observation importante: aprs une insertion, seuls les nuds qui sont sur le chemin du point dinsertion la racine sont susceptibles dtre dsquilibrs Deux cas: insertion dans le sous-arbre de gauche du fils gauche ou dans le sous-arbre de droite du fils droit: Simple rotation insertion dans le sous-arbre de droite du fils gauche ou dans le sous-arbre de gauche du fils droit: Double rotation
Hauteur = 0
10
14
14 2 8
10 1 6
14 2 8
10 1 6
void RD(Arbre *a){ Arbre aux= (*a)->fg; (*a)->fg = aux->fd; aux->fd= *a; *a= aux; }
void RG(Arbre *a){ Arbre aux= (*a)->fd; (*a)->fd = aux->fg; aux->fg= *a; *a= aux; }
16
10
14
6 Nud insr 7
16
10
14
8 6
16
10
14
8 6
16
10
14
16
14 4 8
10
AVL implmentation
Algorithme rcursif Une fois le nud insr, en revenant sur notre chemin, il faut vrifier, pour chaque nud parcouru, les diffrences de profondeur des sous-arbres gauche et droite La rotation peut tre requise nimporte quel nud qui se trouve dans le chemin de la racine au point dinsertion Le retrait est passablement plus compliqu que linsertion (mais demeure O(lg N)) Il y a dautres types darbres quilibrs plus facile implmenter et plus efficaces
Squence dinsertion: 2 10 12 4 16 8 6 14
10
10
-1
12
12
Rotation simple
-1
12
12
-1
16
-2
12
-1
-1
16
12
-1
16
Rotation simple
12
-1
16
12
-2
16
14
-1
14
12
0
16
0
Rotation double
10 4
1 -1
14 12
0
2 6
16
0
-1
7
0
Noeud insr
8 4
1 0
10
-1
-1
9
0
14
0
12
16
Arbres Rouge-Noir
Larbre a les proprits suivantes: 1. Chaque nud est soit rouge soit noir 2. La racine est noire 3. Si un nud est rouge, tous ses enfants doivent tre noirs 4. partir de nimporte quel nud, tous les chemins de la racine jusqu un pointeur NULL doivent avoir le mme nombre de nuds noirs Comme la racine est noire et il ne peut y avoir plus de deux nuds rouges conscutifs, la longueur de tout chemin de la racine une feuille ne peut tre suprieure 2 fois le nombre de nuds noirs dans ce chemin
15 10 20
70
60 50 65 80
85 90
40
55
tas
Dfinition
Un arbre parfait est un arbre binaire dont les feuilles sont situes sur deux niveaux successifs : lavant dernier niveau est complet, et les feuilles du dernier niveau sont regroupes le plus gauche possible.
Exemple
71
Dfinition
Un arbre parfait partiellement ordonn est un arbre parfait dont les sommets sont tiquets par des lments trier, et tel que llment associ chaque sommet est sommet.
Exemple
72
Dfinition
Un tas (heap) est un tableau t reprsentant un arbre parfait partiellement ordonne selon les rgles suivantes : t[1] est la racine t[2i] et t[2i + 1] sont les fils gauche et droite de t[i] (sils existent)
Exemple
73
74
CONSTRUCTION DU TAS
Lessentiel est une procdure AJOUT qui ajoute un lment nouveau un tas. On ajoute cet lment comme une feuille (au dernier niveau), puis on lchange avec son pre tant quil est infrieur celui-ci.
75
Exemple
Rsultat final
76
Pourquoi?
Parce que la hauteur dun arbre parfait p sommets est log(p).
77
78
Exemple
Rsultat final
79
Lalgorithme TRI-TAS
On ajoute successivement chacun des n lments dans le tas
t[1 . . . p], p augmente de 1 aprs chaque adjonction. A la fin on a un tas de taille n. Tant que p > 1, on supprime le minimum du tas, on dcroit p de 1, et on range le minimum la (p + 1)eme place. Puis on rorganise le tas. t[p + 1 . . . n] contient les n p plus petits lments en ordre dcroissant.
80
Exemple
81
Exemple suite
82
83
84
85
86
87
Tableaux associatifs
Un tableau dans lequel un contenu est associ une clef : Un dictionnaire Un annuaire Remarques : Un tableau est un tableau associatif a clefs entires. Comment faire un dictionnaire en C ? Quelle complexit pour la recherche dans cette solution ? Les tableaux associatifs n'ont pas d'ordre (a priori). Souvent, leur implmentation en a un ! Objectif : Accs en temps constant la donne connaissant sa clef.
88
Hash Tables
Une Table de Hachage est une faon d'implmenter un tableau associatif : On se donne un tableau de taille N? Pour un couple clef/contenu a insrer dans le tableau :
1. On calcule un entier significatif de sa clef (son hashCode : i) 2. On place le couple clef/valeur a la place tab[i]
Problmes :
Il faut ncessairement 0< hash(clef) <N Comment choisir la fonction hash ? peu de collisions. Gestion des collisions.
89
Fonctions de hachage
Peu de collisions : le mieux : une distribution uniforme des clefs...
limitation de taille : rsultat du hachage pris modulo N.
En java, pour une chaine de char, la mthode hashCode utilise B=31 (nombre premier pour viter interfrences entre %m et les B^k )
90
91
92