Академический Документы
Профессиональный Документы
Культура Документы
N.E. Oussous
oussous@lifl.fr
FIL USTL
Maximier - Dnition
Un arbre vide est considr comme un maximier.
Maximier - Dnition
Un arbre vide est considr comme un maximier. Un arbre binaire non vide est un maximier si et seulement si
Maximier - Dnition
Un arbre vide est considr comme un maximier. Un arbre binaire non vide est un maximier si et seulement si sa racine porte la valeur maximale.
Maximier - Dnition
Un arbre vide est considr comme un maximier. Un arbre binaire non vide est un maximier si et seulement si sa racine porte la valeur maximale. ses 2 sous-arbres principaux sont des maximiers.
Maximier - Dnition
Un arbre vide est considr comme un maximier. Un arbre binaire non vide est un maximier si et seulement si sa racine porte la valeur maximale. ses 2 sous-arbres principaux sont des maximiers. la racine des 2 sous-arbres principaux on trouve donc les 2me et 3me valeurs selon lordre dcroissant.
Maximier - Dnition
Un arbre vide est considr comme un maximier. Un arbre binaire non vide est un maximier si et seulement si sa racine porte la valeur maximale. ses 2 sous-arbres principaux sont des maximiers. la racine des 2 sous-arbres principaux on trouve donc les 2me et 3me valeurs selon lordre dcroissant. On a un ordre partiel :
Maximier - Dnition
Un arbre vide est considr comme un maximier. Un arbre binaire non vide est un maximier si et seulement si sa racine porte la valeur maximale. ses 2 sous-arbres principaux sont des maximiers. la racine des 2 sous-arbres principaux on trouve donc les 2me et 3me valeurs selon lordre dcroissant. On a un ordre partiel : Le pre est plus grand que ses deux ls.
Maximier - Dnition
Un arbre vide est considr comme un maximier. Un arbre binaire non vide est un maximier si et seulement si sa racine porte la valeur maximale. ses 2 sous-arbres principaux sont des maximiers. la racine des 2 sous-arbres principaux on trouve donc les 2me et 3me valeurs selon lordre dcroissant. On a un ordre partiel : Le pre est plus grand que ses deux ls. Pas dordre entre les frres.
API2 - LSTA p.2/33
Maximier - Exemple
9
Maximier - Utilit
La structure de maximier nest pas utilise pour implmenter les primitives usuelles (recherche, insertion, suppression) sur les ensembles.
Maximier - Utilit
La structure de maximier nest pas utilise pour implmenter les primitives usuelles (recherche, insertion, suppression) sur les ensembles. Par exemple, la recherche dune valeur particulire peut amener parcourir tout larbre (donc tre en (n)). Elle ncessite de plus la gestion dune pile dont la hauteur est celle de larbre lui-mme. Cette recherche serait donc inefcace.
Maximier - Utilit
La structure de maximier nest pas utilise pour implmenter les primitives usuelles (recherche, insertion, suppression) sur les ensembles. Par exemple, la recherche dune valeur particulire peut amener parcourir tout larbre (donc tre en (n)). Elle ncessite de plus la gestion dune pile dont la hauteur est celle de larbre lui-mme. Cette recherche serait donc inefcace. Un maximier est par contre utilis pour extraire le maximum parmi un ensemble de valeurs.
Maximier - Cueillette
La suppression de llment maximal est, par contre, plus efcace. On remplace cet lment par le plus grand de ses successeurs.
Maximier - Cueillette
La suppression de llment maximal est, par contre, plus efcace. On remplace cet lment par le plus grand de ses successeurs. On recommence lopration avec le successeur utilis.
Maximier - Cueillette
La suppression de llment maximal est, par contre, plus efcace. On remplace cet lment par le plus grand de ses successeurs. On recommence lopration avec le successeur utilis. On supprime la feuille utilise en dernier.
Cueillette - Exemple
9
Cueillette - Exemple
8
Cueillette - Exemple
8
Cueillette - Exemple
8
Cueillette - Exemple
8
Cueillette - Exemple
8
Cueillette - Exemple
8
Cueillette - Exemple
8
Cueillette - Code
procedure Supprimer_Max(var T : Maximier) ; X : Curseur ; Begin X := Racine(T) ; While not Est_Feuille(X) Do Begin Determiner quel successeur possde la valeur maximale ; Recopier cette valeur; Descendre X du cot o se trouvait la valeur maximale ; end ; // while Supprimer(X); End ; // Supprimer_Max
Pr-Maximier
Un Pr-Maximier est un arbre dont les 2 sous-arbres principaux sont des maximiers.
Pr-Maximier
Un Pr-Maximier est un arbre dont les 2 sous-arbres principaux sont des maximiers. Un pr-maximier nest pas ncessairement un maximier, cela dpend de la valeur porte la racine.
Pr-Maximier
Un Pr-Maximier est un arbre dont les 2 sous-arbres principaux sont des maximiers. Un pr-maximier nest pas ncessairement un maximier, cela dpend de la valeur porte la racine. La transformation en maximier (Rorganisation) se fait par une mthode analogue celle utilise pour la suppression du maximum.
Pr-Maximier Maximier
Si le pr-maximier nest pas un maximier, il faut
Pr-Maximier Maximier
Si le pr-maximier nest pas un maximier, il faut changer la valeur porte la racine avec la valeur maximale de ses successeurs,
Pr-Maximier Maximier
Si le pr-maximier nest pas un maximier, il faut changer la valeur porte la racine avec la valeur maximale de ses successeurs, Rorganiser le successeur avec lequel a eu lieu lchange.
Pr-Maximier Maximier
Si le pr-maximier nest pas un maximier, il faut changer la valeur porte la racine avec la valeur maximale de ses successeurs, Rorganiser le successeur avec lequel a eu lieu lchange. La rorganisation ncessite le parcours dune seule branche, avec un traitement en (1) chaque nud parcouru.
Rorganisation - Exemple
2
Rorganisation - Exemple
2
Rorganisation - Exemple
9
Rorganisation - Exemple
9
Rorganisation - Exemple
9
Rorganisation - Exemple
9
Rorganisation - Exemple
9
Rorganisation - Code
procedure Reorganiser(var T : Maximier) ; X : Curseur ; Begin X := Racine(T) ; Repeat if not Est_Vide(sag(X)) then begin G := X; G := sag(G) ; if not Est_Vide(sad(X)) then begin D := X; D := sad(D) ; if Valeur(D) > Valeur(G) and Valeur(D) > Valeur(X) then begin Changer_Valeur(X, Valeur(D)); X := D; end else if Valeur(G) > Valeur(D) and Valeur(G) > Valeur(X) then begin Changer_Valeur(X, Valeur(G)); X := G; end else exit; end else begin Changer_Valeur(X, Valeur(G)); X := G; end; end else if not Est_Vide(sad(X)) then begin Changer_Valeur(X, Valeur(D)); X := D; end else exit; until false ; // Repeat End ;
API2 - LSTA p.11/33
Fabrication - Exemple
2
Fabrication - Exemple
2
Fabrication - Exemple
2
Fabrication - Exemple
2
Fabrication - Exemple
2
Fabrication - Exemple
2
Fabrication - Exemple
9
Mais linterface darbre propose jusquici ne permet pas dimplmenter aisment cette version itrative, faute de moyen efcace pour parcourir tous les sous-arbres dune hauteur donne.
Tri-Arbre : Heapsort
Lutilisation des maximiers peut amener une mthode de tri appele Tri-arbre ou Heapsort. Description informelle de lalgorithme :
Tri_Arbre(var T : Tableau) Begin Constituer un arbre contenant les valeurs de T; Fabriquer un maximier partir de cet arbre; for i:=low(T) to high(T) do begin Ranger le maximum dans T[i] ; Retirer le maximum de larbre ; end; // for End ; // Tri_Arbre
En pratique, cette mthode de tri est employe dans le cas dune implmentation darbre bien particulire : le tas.
API2 - LSTA p.16/33
La structure de Tas
La structure de tas permet de reprsenter, dans un tableau, un arbre quasi-quilibr, dont les feuilles profondeur maximale sont situes le plus gauche possible.
La structure de Tas
La structure de tas permet de reprsenter, dans un tableau, un arbre quasi-quilibr, dont les feuilles profondeur maximale sont situes le plus gauche possible. Elle consiste ranger les valeurs portes par les nuds
La structure de Tas
La structure de tas permet de reprsenter, dans un tableau, un arbre quasi-quilibr, dont les feuilles profondeur maximale sont situes le plus gauche possible. Elle consiste ranger les valeurs portes par les nuds par profondeur croissante
La structure de Tas
La structure de tas permet de reprsenter, dans un tableau, un arbre quasi-quilibr, dont les feuilles profondeur maximale sont situes le plus gauche possible. Elle consiste ranger les valeurs portes par les nuds par profondeur croissante de gauche droite (pour une profondeur donne).
La structure de Tas
La structure de tas permet de reprsenter, dans un tableau, un arbre quasi-quilibr, dont les feuilles profondeur maximale sont situes le plus gauche possible. Elle consiste ranger les valeurs portes par les nuds par profondeur croissante de gauche droite (pour une profondeur donne). un arbre = un tableau un curseur = un indice du tableau un nud = une case du tableau
Tas - Exemple
9 7 8
10
11
12
Racine Successeur gauche Successeur droite Prdecesseur Est_Feuille Possde 2 successeurs Possde 1 seul successeur Dernier nud interne
1 2i 2i + 1 2i > n 2i < n 2i = n
n 2
API2 - LSTA p.19/33
i 2
Racine Successeur gauche Successeur droite Prdecesseur Est_Feuille Possde 2 successeurs Possde 1 seul successeur Dernier nud interne
low(T ) 2i low(T ) + 1 2i low(T ) + 2 1 (i + low(T ) 1) 2 2i low(T ) + 1 > high(T ) 2i low(T ) + 1 < high(T ) 2i low(T ) + 1 = high(T ) 1 (high(T ) + low(T ) 1) 2
La structure de Tas
Les moins
La structure de Tas
Les moins Les arbres auront une taille maximale, celle du tableau.
La structure de Tas
Les moins Les arbres auront une taille maximale, celle du tableau. Un nud est associ une case (xe) du tableau. la suppression dun nud ou linsertion dun nouveau nud sont impossibles.
La structure de Tas
Les moins Les arbres auront une taille maximale, celle du tableau. Un nud est associ une case (xe) du tableau. Les plus
La structure de Tas
Les moins Les arbres auront une taille maximale, celle du tableau. Un nud est associ une case (xe) du tableau. Les plus Pas besoin de pointeurs.
La structure de Tas
Les moins Les arbres auront une taille maximale, celle du tableau. Un nud est associ une case (xe) du tableau. Les plus Pas besoin de pointeurs. Le passage dun nud ses successeurs se fait par adressage calcul.
La structure de Tas
Les moins Les arbres auront une taille maximale, celle du tableau. Un nud est associ une case (xe) du tableau. Les plus Pas besoin de pointeurs. Le passage dun nud ses successeurs se fait par adressage calcul. Possibilit de calculer galement lemplacement du prdcesseur.
La structure de Tas
Les moins Les arbres auront une taille maximale, celle du tableau. Un nud est associ une case (xe) du tableau. Les plus Pas besoin de pointeurs. Le passage dun nud ses successeurs se fait par adressage calcul. Possibilit de calculer galement lemplacement du prdcesseur. Possibilit de parcourir larbre de bas en haut.
API2 - LSTA p.21/33
On est dans le cas 2 du thorme gnral avec 3 a = 1 b = 2 La solution est donc f (n) = (1)
Fabriquer un Tas
Les feuilles sont situes dans les dernires cases du tableau : T[( n +1)..n]. En supposant que le 2 tableau est indic de 1 n. On parcourt les sous-arbres par hauteurs croissantes en parcourant les cases du tableau en ordre inverse.
Fabriquer un Tas
Les feuilles sont situes dans les dernires cases du tableau : T[( n +1)..n]. 2 On parcourt les sous-arbres par hauteurs croissantes en parcourant les cases du tableau en ordre inverse.
procedure Fabriquer_Tas(var T : Arbre) ; begin for i:=Dernier_arbre_h2 downto Racine do begin Reorganiser(i); // Reorganiser(T,i) end; end Fabriquer_Tas;
Racine 1 et Dernier_arbre_h2 n . 2
Fabriquer un Tas
Les feuilles sont situes dans les dernires cases du tableau : T[( n +1)..n]. 2 On parcourt les sous-arbres par hauteurs croissantes en parcourant les cases du tableau en ordre inverse.
procedure Fabriquer_Tas(var T : Arbre) ; begin for i:=Dernier_arbre_h2 downto Racine do begin Reorganiser(i); // Reorganiser(T,i) end; end Fabriquer_Tas;
Le temps dexcution de Fabriquer_tas : Chaque appel Reorganiser cote O(log2 n). Il existe O(n) appels de ce type. Donc, le temps dexcution est au plus O(n log n).
API2 - LSTA p.26/33
Exemple
Soit le tableau suivant :
1 4 2 1 3 3 4 2 5 16 6 9 7 10 8 14 9 8 10 7
Exemple
Soit le tableau suivant :
1 4 2 1 3 3 4 2 5 16 6 9 7 10 8 14 9 8 10 7
3 3 5 16 6 9 7 10
Exemple
1 4 2 1 4 2 8 14 9 8 i 10 7 5 16 6 9 3 3 7 10
Exemple
1 4 2 1 4 i 8 14 2 9 8 10 7 5 16 6 9 3 3 7 10
Exemple
1 4 2 1 4 14 8 2 9 8 10 7 5 16 6 9 i 3 3 7 10
Exemple
1 4 2 i 4 14 8 2 9 8 10 7 1 5 16 6 9 3 10 7 3
Exemple
1 i 2 16 4 14 8 2 9 8 10 1 5 7 6 9 4 3 10 7 3
Exemple
1 16 2 14 4 8 8 2 9 4 10 1 5 7 6 9 3 10 7 3
T (n) =
i=0
hi
O(i) = O 2
h i=0
i 2i
i=0
1/2 i = = 2 i 2 2 (1 1/2)
kx
k=0
x = (1 x)2
i=0
1/2 i = = 2 i 2 2 (1 1/2)
i=0
i = O n i 2
i=0
i 2i
= O(n 2) = O(n)
i=0
1/2 i = = 2 i 2 2 (1 1/2)
i=0
Ainsi, on peut construire un tas partir dun tableau non ordonn en un temps linaire.
API2 - LSTA p.30/33
i = O n i 2
i=0
i 2i
= O(n 2) = O(n)
Exemple
1 16 2 14 4 8 8 2 9 4 10 1 5 7 6 9 3 10 7 3
Exemple
1 1 2 14 4 8 8 2 9 4 10 16 i 5 7 6 9 3 10 7 3
Exemple
1 14 2 8 4 4 8 2 9 1 10 16 i 5 7 6 9 3 10 7 3
Exemple
1 1 2 8 4 4 8 2 9 14 i 10 16 5 7 6 9 3 10 7 3
Exemple
1 10 2 8 4 4 8 2 9 14 i 10 16 5 7 6 1 3 9 7 3
Exemple
1 2 2 8 4 4 8 10 i 9 14 10 16 5 7 6 1 3 9 7 3
Exemple
1 9 2 8 4 4 8 10 i 9 14 10 16 5 7 6 1 3 3 7 2
Exemple
1 8 2 7 4 4 8 10 9 14 10 16 5 2 6 1 3 3 7 9 i
Exemple
1 7 2 4 4 1 8 10 9 14 10 16 5 2 6 8 i 3 3 7 9
Exemple
1 4 2 2 4 1 8 10 9 14 10 16 5 7 i 6 8 3 3 7 9
Exemple
1 3 2 2 4 4 8 10 i 9 14 10 16 5 7 6 8 3 1 7 9
Exemple
1 2 2 1 4 4 8 10 9 14 10 16 5 7 6 8 3 3 i 7 9
Exemple
1 1 2 2 4 4 8 10 9 14 10 16 i 5 7 6 8 3 3 7 9
Exemple
1 1 2 2 4 4 8 10 9 14 10 16 i 5 7 6 8 3 3 7 9
1 1
2 2
3 3
4 4
5 7
6 8
7 9
8 10
9 14
10 16
API2 - LSTA p.32/33
Lappel Fabriquer_Tas prend un temps en O(n). Chacun des n 1 appels Reorganiser prend un temps en O(log n).
Lappel Fabriquer_Tas prend un temps en O(n). Chacun des n 1 appels Reorganiser prend un temps en O(log n). La complexit de Tri_Tas est donc en O(n log n).
API2 - LSTA p.33/33