Ch5 Algorthmique Avancée - Algorithme de Tri
-
Upload
lotfibenromdhane -
Category
Documents
-
view
1.621 -
download
0
Transcript of Ch5 Algorthmique Avancée - Algorithme de Tri
Algorithmes de TRI© L. B. Romdhane, Ph.D.
DSI/FSM/ UM/ Tunisie
NTRODUCTION (1)• Problématique - Etant donnée une séquence
d'objets (un vecteur), ordonner les éléments de cetteséquence en ordre croissant; ou décroissant
• Pour résoudre ce problème, nous avons besoin
• d'une séquence d 'éléments• tous les éléments sont du même type• aucune restriction sur la tai l le de cette séquence• sans perte de généralités, on supposera que le vecteur est un
tableau• une fonction de comparaison
• étant donné deux éléments; elle détermine celui plus petit(plus grand)
• permet de définir une relation d'ordre sur les élément
1, . 1). KmniHiunc; FSM.TN L3
sommaire• Introduction• Tri par sélection• Tri à bulle• Tri par insertion• Tri par fusion• Tri rapide• Comparaison
L. B. RoradLaric; FSM.TN
Tri par SélectionSélection Sort
ASD O L. B. Roradhane; FSM.TN
RI PAR SELECTION (1)Trouver le rang du plus petit élément du tableau V• trouver m tel que V[i] > V[m] ; Vi
Echanger l'élément V[m] avec V[i]
Reprendre le même processus; mais en considérantuniquement la séquence des éléments V[2J, ..., V[n]
Lorsqu'on atteint une séquence constituée d'un seulélément on s'arrête !• une séquence d'un seul élément est par définition triée !
ASD S) L. B. Romdhane; FSM.TN L5
RI PAR SELECTION (3)procédure triSelection (V: Tableau[n] d'entier)
VAR i, k, ind_min, aux : entier
DébutPour i de i à n-i faire
ind_min<— iPour k de i+i à n faire
si (V[k] < V[ind_min]) alors ind_min *- kFin Si
Fin Pouraux <~- V]iJ, V{iJ <- Vjind_minJ^ Vjind_minJ <— aux
Fin Pour
<E> L. B. Romdbanc; FSM-TN
TRfPAR
1=1 ! 2
i=2 O
1=4
î 1
o
o
o
JL
.5 L! 5
i
i
! .?_.
9-14
-i-â-1 §L.iT I2
2 4
C L. B. Romdhane; FSM.TN L6
PAR SELECTION (4)i
1 ' Théorème - L'algorithme de tri par sélection admetune complexité de O(n2)
Autre variante• Trouver m, le rang du plus grand élément du tableau V
• Echanger V[m] avec V[n]
• Reprendre le même processus; mais en considérantuniquement la séquence des éléments V[i], ..., V[n-i]
• Jusqu'à atteindre une séquence d'un seul élémeet
O UB. Romdhane ;¥SM.TN
Tri à BulleBubble Sort
<4
ASD © L. B. Romdhane; FSM.TN L9
RI A BULLE (2)parcours nurn. i parcours nuni. 2
V = [z; i; i; 5; o; 9; 4]
lrl|.^_.-..f.-.f . .i=5Î * ,. ° I 2 L _ l _ l _ 5 _ _ l - - 9 _ .
V= U;i ; i; 5; 059; 4]prT.pTTfT^ 'v'ii — •^•-T-— ---
, i'= o i. o ! 5 1 4 î 9
1 ----- *._rl._4.--!-_< — ;_i=3! i o 2 4 5 9
ASD 0 L. B. Roradhane; FSM.TN L U
RI A BULLE (1)• Parcourir le tableau et comparer deux éléments
consécutifs en les échangeant s'ils ne sont pas dans lebon ordre
• Ainsi, à la fin du parcours, on trouvera le plus grandélément à la fin du tableau
• Reprendre le même processus avec la séquence V[o],V[i],...,V[n-i]
• On s'arrête lorsqu'on atteint une séquence contenantun seul élément
ASD © L. B. Romdhanc; FSM.TN L10
'RI A BULLE (3)procédure triBulle (V: Tableau[n] d'entier)
VAR permut : booléen; k, aux, p : entier
Débutpermut<— Vrai, p <— n-iTantQue (permut) Faire
permut <— FauxPour i de i à p faire
Si (V[i]>V[i+i]) alorsaux^- V[i],V[i]^- V[i+i],V[i+i] «- auxpermut <— Vrai
Fin SiFin Pourp<-p-i
Fin TantQueFin.
ASD e L. B. Romdhanc; FSM.TN L12
Tri par InsertionInsertion Sort
ASD €> L. B. Romdhane; FSM.TN
RI PAR INSERTION (1)Supposons que nous avons réussi à trier les k premierséléments de la séquence
séquence triée séquence non encore triée
• Ainsi, on augmente la taille de la séquence triée en luiajoutant le premier élément de la séquence non triée;mais en l'insérant directement dans sa bonne place
séquence non encore triéet
© L. B. Romdhane; FSM.TN
RI PAR INSERTION (2)
insérer 6
insérer 4
insérer 9
6 4
4 6 9 1 5 2
4 6 9 I 5 2
insérer 1
insérer 5
insérer 2
RI PAR INSERTION (3)procédure trilnsertion (V: Tableau[n] d'entier)
VAR permut : booléen; k, aux, p : entier
DébutPour i de i à (n-i) faire
j f - iTantQue ((V[j] > x) ET (j>o)) faire
Fin TantQuex
Fin PourFin.
ASD (D L. B. Koiudhane; KSM.TN 1,15 ASD » L. B. Romdbanc; FSM.TN
Tri Par FusionMerge Sort
FUSION (.')
\> f '. • ' J ' •di , , \ I I
O L. B. Rondhcinc; KSM.TN
TRI PAR FUSION (1)
ASD
• f
Le principe du tri par f u s i o n d 'une scqueiu <• Nd'éléments est résumé comme su i l
• Si 5est vide ou contient un seul élément; elle estdéfinition triée; donc on retourne S
• sinon
i. On divise S en deux séquences Si & Sz approximativementde même taille (11/2)
^. Récursivement; on effectue le tri de Si et le tri de Sz3. On fusionne Si & Sz, en une seule séquence triée
:l PAR FUSIOlvTfS)
appel récursif
diviser
appel récursifI 12 j Séquences d 'un élément := ' plus d'appels récursifs p
cette branche de l'arbreappel récumf ^ -'" *'**?' «*"«•* Pour
TRTPAR
ASl)
appel récursif
12 9 diviser 9
fusion
© L. B. Romdhmic; KSM.TN
Fusior\(6)
y 6 20 •} 15
6 !,. !
appel récursif
\ 6 I 9 j 12 | fusion [3 f 15 f 20 !L.M«—J-......1...«_J L_.~..._A.~_... L_a._.b.l
» L. B. Romdhanc; FSM.TN
L21
L23
FUSION (5)
12 9 6 20 3 15
appel récursif
9 i 12fusion
ASD > L. B. Romdhane; FSM.TN
RI PAR FUSION (7)Fonction triFusion (V: Vecteur) : Vecteur
VAR Vi, V2 : Vecteur
DébutSi (taille(V) = o) ou (taille(V) = i)) alors
retourner (V)
Sinon
Diviser(V, Vi, Vz)Vi<— triFusion(Vi)Va<— triFusion(V2)V<- fusion (Vi, Vz)Retourner (V)
FinSiFin.
ASD © L. B. Romdhane; FSM.TN
I 20 |
L24
TRI PAR FUSION (8)• I ,a méthode diviser permet de diviser un vecteur de dimension n, en
deux vecteurs de dimension (0/2)Procédure Diviser (In V, InOut Vi, InOut Vz : Vecteur) : Vecteur
VAR k,m : entiere : élément
Début ___m <- taille (V) DIV 2 + taille(V) MOD 2 sa
Vi <— créerQ, Va <— créerQ,Pour k de i à m faire
e<— savoir_elem(k, v)Vi <— insérer(e, k, Vi)
Fin PourPour k de m+i à taille(V) faire
e*— savoir_elem(k, v)Va <— insérer(e, k-m, Vi)
Fin PourFin.
> L. B. Romdhanc; FSM.TN
TRI PAR FUSION (10)Procédure fusionner(Vi, Vz :
Vecteur) : VecteurVAR i, j, k, m, n : entier
V : Vecteurei, e2, e : élément
Débutm <- taille (Vi), n «- taille (Va), k <-
iV <— créerQ, i <— i, j <— iTantQue ((i <= n) ET (j <= m)) faire
ei<— savoirmelem(i, vi), ez <—savoir_elera(j, vz)
Si (ei < es) alors e *— ei, i <— î +jsinon e «- ez, j 4- j+iFin SiV <— insérer(e, k, V)k «— k +1
Fin Tant QueFin.
TantQue (i <= n) fairec<— savoir_elem(i, vi)V <-• insc4rer(e, k, V)k < • k i ii «- i n
l'in Tjiil ()ne
TantQue (j <= m) fairee^- savoir_cleni(j, vi)V (- insérur(e, k, V)k <-- k nj«-i+i
Fin Tant Queretourner (V)
Fin.
L25
ASD 0 L. B. Romdhanc; FSM.TN
FUSION (9)La méthode fusionner permet la fusion de deuxséquences triées en une seule triée !
3
3
3
3
6
6
6
9
9 12
9 12 15 20
ASD • L. B. Romdhaue; FSM.TN
Tri RapideQuick Sort
ASD © L. B. Romdhanc; FSM.TN L28
TRI RAPIDE (1)• I ,c principe du tri rapide d'une séquence S d'éléments est
résumé comme suit• Si S est vide ou contient un seul élément; elle est par
définition triée, donc retourner S• sinon
1. On choisit (aléatoirement) un élément de S comme étant le pivot2. On divise S en trois séquences Si, 82, & Sj de la manière suivante
• Si contient tous les éléments inférieurs au pivot• Sz contient tous les éléments égaux au pivot• £3 contient tous les éléments supérieurs au pivot
3. Récursivement; trier Si & 834. Concaténer dans cet ordre : Si, S2 & £3
ASD 6 L. B. Romdhanc; FSM.TN L
pivot
12 9 20 3 15
ASD
partitionnement
!.. B. Romdhanc; FSM.TN
. HPPSe -J^f~. ,V.T^=^^^ _
JTRT=RAPIDE (2)
pivot
partitionnement
appel récursif
3 Séquence d'un élément : plus d'appelsrécursifs pour cette branche de l'arbre
O L. B. Roiudhanc; FSM.TN
r^v^i^^^^;^^^^ - •• =--"=
^TftTRAPIDE (4)
L30
ASD L. B. Romdhanc; FSM.TN
TRI RAPIDE (5)
12 9 20 15
cappel récursifappel récui'sif j j
12SLJconcaténation
ASD © L. B. Ron>dh:iiic; KSM.'I'N
TRTRÂPIDE (7)
concaténation
ASD © L. B. Romdhane; FSM.TN L)S
12 9 6 20 3 15
LU
concaténation
© L. B. Romdhane; FSM.TN
RI RAPIDE (8)fonction triRapide (V: Vecteur) : Vecteur
VAR Vi, Vz, V3 : Vecteurm : élément
DébutSi (taille(V) - o) ou (taille(V) = i)) alors
retourner (V)Sinon
m <— choisirPivot(V)DiviserPivot(V, m Vi, Vz, V3) • • |Vi<- triRapide(Vi)V3^- triRapide(V3)V<- concat(Vi, V2> V3)Retourner (V)
FinSiFin.
££
ASD © L. B. Romdhane; FSM.TN L36
TRI RAPIDE (9)Divis ion Concaténation
,omparaison
jimi-i'ilure DiviserPivot (V: Vecteur, pivot : fonction Concat (Vi, Vz, V% : Vecteur) :rlrmi-nt; InOut Vi, Vî, Vj : Vecteur) Vecteur
VAK i, j, k. 1 : entier VAR i, j : entierX : élément V : Vecteur
Début Début
Pour i de i à taiile(V) faire Pour i de i à taille(Vi) fairex <— savoir dem(V, i) x <_ savoir elem(Vt i)si (x < pivot) alors i<-i«, V<- insérer(x, j, V)
vr^LérerKk.v.) «n Pour _«non si (x > pivot) alors P°ur ' ' a taille(V2) faire
)^_ j + t x <- savoir_elem{Vz, i)V3 <- insérer(x, 1, V3) )<- i«. v <~ insérer(«, j, V)
smon Fin Pourj<-j« Pour i de i à taillc(V3) faire
Fi"s' j < - J F - I , V<~ insércr(x,j , V)F'nS' Fin Pour
FinPour retourner (V)
Fln- Fin.
ASD 0 L. B. Roradhane; FSM.TN ' L37
SélectionBulleInsertionFusion
* divide & conquer
Rapide' divide & conquer
ASD
0(n*)0(n*)O(n*)O(n log(n))
OM
C L. B. Romdbanc; FSM.TN
|j|lï|ffliij>Iexité nioyentianj
O(n2)O(n2)0(n>)
0(nlog(n)r
O(n log(n))
L38