Arbre Binaire
-
Upload
hamid-el-bouabidi -
Category
Documents
-
view
231 -
download
0
Transcript of Arbre Binaire
-
7/26/2019 Arbre Binaire
1/23
X, Petite classe 5X, Petite classe 7
Parcours d'arbres
Prfixe: 1, 2, 4, 8, 9, 5, 10, 3, 6, 7
(VGD)Infixe: 8, 4, 9, 2, 10, 5, 1, 6, 3, 7(GVD)
Suffixe: 8, 9, 4, 10, 5, 2, 6, 7, 3, 1(GDV)
1
2 3
4 5 6 7
8 9 10
-
7/26/2019 Arbre Binaire
2/23
X, Petite classe 5X, Petite classe 7
typedefstruct Noeud{
Element contenu;struct Noeud *filsG;
struct Noeud *filsD;}*Arbre;
voidParcoursPrefixe(Arbre a)
{if(a != NULL){
printf("%3d", a->contenu);ParcoursPrefixe(a->filsG);
ParcoursPrefixe(a->filsD);}
}
-
7/26/2019 Arbre Binaire
3/23
X, Petite classe 5X, Petite classe 7
voidParcoursInfixe(Arbre a){
if(a != NULL){
ParcoursInfixe(a->filsG);printf("%3d", a->contenu);ParcoursInfixe(a->filsD);
}}
voidParcoursSuffixe(Arbre a){
if(a != NULL){
ParcoursSuffixe(a->filsG);ParcoursSuffixe(a->filsD);printf("%3d", a->contenu);
}}
-
7/26/2019 Arbre Binaire
4/23
X, Petite classe 5X, Petite classe 7
Proprit de base : Pour chaque
noeud de valeur v, les noeuds dusous-arbre gauche ont une valeur< v et ceux du sous-arbre droitont une valeur > v.
Arbres de recherche
1310
8 14 2116
1912
15
17
-
7/26/2019 Arbre Binaire
5/23
X, Petite classe 5X, Petite classe 7
Exercices
(1) Montrer que le parcours infixeordonne les nuds par valeurcroissante.
(2) Montrer que si un nud adeux fils, son successeur dansl'ordre infixe n'a pas de fils
gauche et son prdcesseur n'apas de fils droit.
(3) Montrer que le successeurdu
nud n est le sommet le plus gauche dans le sous-arbre droitissu de n.
-
7/26/2019 Arbre Binaire
6/23
X, Petite classe 5X, Petite classe 7
Arbre Recherche(Element v, Arbre a){
if (a == NULL || v == a->contenu)
returna;if (v < a->contenu)
returnRecherche(v, a->filsG);returnRecherche(v, a->filsD);
}
Recherche
-
7/26/2019 Arbre Binaire
7/23
X, Petite classe 5X, Petite classe 7
Arbre NouvelArbre(Element v, Arbre a,Arbre b){ Arbre c;
c = (Arbre)malloc (sizeof(struct Noeud)); c->contenu = v; c->filsG = a; c->filsD = b; return c;}
voidAjouterArbre(Element v, Arbre *ap){
Arbre a = *ap;
if(a ==NULL )
a = NouvelArbre(v, NULL , NULL );else if(v contenu)
AjouterArbre(v, &a->filsG);else
AjouterArbre(v, &a->filsD);*ap = a;
}
Ajout d'un lment
-
7/26/2019 Arbre Binaire
8/23
X, Petite classe 5X, Petite classe 7Suppression
(a) le noeud est une feuille : on lesupprime
10
8 14 2116
1912
15
171310
8 14 2116
1912
15
17
(b) le noeud est un a un seul fils :on la supprime
10
8 13 2116
1912
15
171310
8 14 2116
1912
15
17
-
7/26/2019 Arbre Binaire
9/23
X, Petite classe 5X, Petite classe 7
(c) le noeud s a deux fils : onsupprime son successeur t (quin'a pas de fils gauche), mais onremplace la valeur de s par cellede t.
1310
8 14 2116
1912
15
17 1310
8 14 2116
1912
15
17
1310
8 14 2117
1912
16
-
7/26/2019 Arbre Binaire
10/23
voidSupprimerArbre(Element v, Arbre *ap){
Arbre a = *ap;
if(a == NULL)*ap = a;
else if(v < a->contenu)SupprimerArbre(v, &a->filsG);
else if(v > a->contenu)
SupprimerArbre(v, &a->filsD);else if(a->filsG == NULL )
*ap = a->filsD;else if(a->filsD == NULL )
*ap = a->filsG;else(*ap)->contenu =
SupprimerSuccesseur(&a);}
Element SupprimerSuccesseur(Arbre *ap){
Arbre a = *ap;Element v;
if(a->filsG == NULL ){
v = a->contenu;a =NULL ;return v;
}
return SupprimerSuccesseur(&(a->filsG));}
-
7/26/2019 Arbre Binaire
11/23
X, Petite classe 5X, Petite classe 7
O(log n) si l'arbre est quilibr
O(n) si l'arbre est filiforme
--> D'o l'intrt des arbresquilibrs!
Arbre AVL(Adel'son-Vel'skii etLandis) : pour tout noeud, ladiffrence de hauteur entre lessous-arbres gauche et droit estgale -1, 0 ou 1.
Exemple: les tas
Hauteurd'un arbre AVL : O(log n)
Temps de calcul
-
7/26/2019 Arbre Binaire
12/23
X, Petite classe 5X, Petite classe 7
typedefstruct NoeudAVL{
int balance;Element contenu;struct NoeudAVL *filsG;
struct NoeudAVL *filsD;}*ArbreAVL;
-
7/26/2019 Arbre Binaire
13/23
X, Petite classe 5X, Petite classe 7
Thorme. Soit un arbre AVL dehauteur h n sommets. Alors
log2(1 + n) 1 + h 1,44 log2(1 + n)
Preuve. Pour une hauteur hdonne, le nombre maximum desommets est atteint pour l'arbrecomplet 2h+1- 1 sommets.Hauteur 0 :
Hauteur 1 :
Hauteur 2 :
Donc n 2h+1-1 et log2(1 + n) 1 + h
-
7/26/2019 Arbre Binaire
14/23
X, Petite classe 5X, Petite classe 7
Soit N(h) le nombre minimum desommets d'un arbre AVL dehauteur h. On a
N(0) = 0 N(1) = 2
N(h) = 1 + N(h-1) + N(h-2)
Donc F(h) = N(h) + 1 vrifieF(0) = 2 F(1) = 3
F(h) = F(h-1) + F(h-2)d'o F(h) = Fh+3=
1 [(1 + 5)h+3
- (1 - 5)h+3
]
h-1 h-2
5 2 2
-
7/26/2019 Arbre Binaire
15/23
X, Petite classe 5X, Petite classe 7
Rotation simple
h-1 h-2X Y
h-2Z
u v
x
h-1X
Yh-2
Z
u
v
x
u x v
-
7/26/2019 Arbre Binaire
16/23
X, Petite classe 5X, Petite classe 7
Double rotation
u v x w
x
h-2
h-2
X
V
h-2Z
u
v
w
W
v
w
u
X Z
h-2V W
x
-
7/26/2019 Arbre Binaire
17/23
X, Petite classe 5X, Petite classe 7
Donnes : une partition del'ensemble {1, ..., K}
Trouverla classe d'un lment
Faire l'unionde deux classes.
Partitions
Une premire solution :Reprsenter la partition par untableau classetel que classe[i]soit la classe de l'lment i.
Trouver: O(1)Union: O(n)
-
7/26/2019 Arbre Binaire
18/23
X, Petite classe 5X, Petite classe 7
Deuxime solution : utilisationd'une fort.
10
6
8 4
95
1
117
3
2
Trouver: O(n)Union: proportionnel lahauteur de l'arborescence
On reprsente la fort par untableau t tel que t[s] = pre de s(si s est une racine, t[s] = s)
-
7/26/2019 Arbre Binaire
19/23
X, Petite classe 5X, Petite classe 7
Union pondre
Rgle: Lors de l'union, la racinede l'arbre le moins haut devientfils de la racine de l'arbre le plus
haut.
6
10
8 4
95
1
117
3
2
On part de la partition de {1, ..., K}en K classes.
1 2 K
-
7/26/2019 Arbre Binaire
20/23
X, Petite classe 5X, Petite classe 7
Notons ti(x)la taille (= nombre denoeuds) et hi(x) la hauteur dusommet x aprs la i-me oprationd'union pondre. On a t0(x) = 1et
h0(x) = 0.
Lemme. On a ti(x) 2hi(x)et
hn(x) log2(n + 1).
Preuve.(a) Si hi(x) = 0, alorsti(x) = 1
(b) suivre
x
-
7/26/2019 Arbre Binaire
21/23
X, Petite classe 5X, Petite classe 7
Lemme. On a ti(x) 2hi(x)ethn(x) log2(n + 1).
Preuve (suite).
(b) Si hi(x) > 0, soit y un fils de x. On ahi(y) = hi(x) - 1. Si y est devenu un fils
de x lors de la j-ime union (j i), on a
tj-1(x) tj-1(y), d'o tj(y) = tj-1(y) et
tj(x)
2tj(y). Ensuite, la taille de y nevarie plus, mais celle de x peut crotre.De mme, la hauteur de y ne varie
plus, donc hi(y) = hj-1(y). Par hypothse
de rcurrence, tj-1(y) 2hj-1(y), donc
tj(y) = tj-1(y) 2hj-1(y)= 2hi(y)ettj(x)tj(x)2.tj(y)2.2
hi(y)=2hi(x)
Comme tn(x) n+1, on a la secondeingalit.
x
y
-
7/26/2019 Arbre Binaire
22/23
X, Petite classe 5X, Petite classe 7
Corollaire. Une suite de n-1
"unions" et de m "trouver" se
ralise en temps O(n + m log n).
-
7/26/2019 Arbre Binaire
23/23
X, Petite classe 5X, Petite classe 7
Compression des cheminsOn comprime un chemin en faisant
de chaque nud travers un fils de
la racine :
10
8 4
95
1
10
8
4 95
1
Prop. Une suite de n-1"unions" et
de m "trouver" (m n) se raliseen temps O(m.(n,m)), o estune sorte d'inverse de la fonction
d'Ackermann. En pratique, (n,m)2.