sommaire                                                                           • Introduction                         ...
RI PAR SELECTION (1)                                                TRfPAR      Trouver le rang du plus petit élément du t...
RI A BULLE (1)                                                                                                   • Parcour...
RI PAR INSERTION (1)                                                                                     Supposons que nou...
TRI PAR FUSION (1)                              •      fTri Par Fusion                                            Le princ...
TRTPAR                                                                                                                    ...
TRI PAR FUSION (8)                                                                                                        ...
. H P e                                                                                       P S ^         -J^f~.      ,V...
TRI RAPIDE (5)                           12       9    20     15                                                          ...
TRI RAPIDE (9)                                                                                                           ,...
Prochain SlideShare
Chargement dans…5
×

Ch5 Algorthmique Avancée - Algorithme de Tri

2 175 vues

Publié le

0 commentaire
1 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

Aucun téléchargement
Vues
Nombre de vues
2 175
Sur SlideShare
0
Issues des intégrations
0
Intégrations
4
Actions
Partages
0
Téléchargements
199
Commentaires
0
J’aime
1
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Ch5 Algorthmique Avancée - Algorithme de Tri

  1. 1. sommaire • Introduction • Tri par sélection • Tri à bulle Algorithmes de TRI • Tri par insertion © L. B. Romdhane, Ph.D. • Tri par fusion DSI/FSM/ UM/ Tunisie • Tri rapide • Comparaison L. B. RoradLaric; FSM.TNNTRODUCTION (1)• Problématique - Etant donnée une séquence dobjets (un vecteur), ordonner les éléments de cette séquence en ordre croissant; ou décroissant Tri par Sélection• Pour résoudre ce problème, nous avons besoin Sélection Sort • dune séquence déléments • tous les éléments sont du même type • aucune restriction sur la taille 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 dordre sur les élément 1,. 1). KmniHiunc; FSM.TN L3 ASD O L. B. Roradhane; FSM.TN
  2. 2. RI PAR SELECTION (1) TRfPAR 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] 1=1 ! 2 î 1 JL Reprendre le même processus; mais en considérant i=2 O .5 L ! .?_. -1 uniquement la séquence des éléments V[2J, ..., V[n] ! 5 9 4 Lorsquon atteint une séquence constituée dun seul 1=4 o i -i-â-1 §L.i T I élément on sarrête ! o i 2 • une séquence dun seul élément est par définition triée ! o 2 4ASD S) L. B. Romdhane; FSM.TN L5 C L. B. Romdhane; FSM.TN L6 RI PAR SELECTION (3) PAR SELECTION (4) iprocédure triSelection (V: Tableau[n] dentier) 1 Théorème - Lalgorithme de tri par sélection admet VAR i, k, ind_min, aux : entier une complexité de O(n2) Début Autre variante Pour i de i à n-i faire • Trouver m, le rang du plus grand élément du tableau V ind_min<— i Pour k de i+i à n faire • Echanger V[m] avec V[n] si (V[k] < V[ind_min]) alors ind_min *- k • Reprendre le même processus; mais en considérant Fin Si uniquement la séquence des éléments V[i], ..., V[n-i] Fin Pour • Jusquà atteindre une séquence dun seul élémeet aux <~- V]iJ, V{iJ <- Vjind_minJ^ Vjind_minJ <— aux Fin Pour <E> L. B. Romdbanc; FSM-TN O UB. Romdhane ;¥SM.TN
  3. 3. RI A BULLE (1) • Parcourir le tableau et comparer deux éléments consécutifs en les échangeant sils ne sont pas dans leTri à Bulle bon ordre Bubble Sort • 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], <4 V[i],...,V[n-i] • On sarrête lorsquon atteint une séquence contenant un seul élémentASD © L. B. Romdhane; FSM.TN L9 ASD © L. B. Romdhanc; FSM.TN L10 RI A BULLE (2) RI A BULLE (3) procédure triBulle (V: Tableau[n] dentier)parcours nurn. i parcours nuni. 2 VAR permut : booléen; k, aux, p : entierV = [z; i; i; 5; o; 9; 4] V= U;i; i; 5; 059; 4] Début prT.pTTfT^^vii — •^•-T-— --- permut<— Vrai, p <— n-i , i TantQue (permut) Faire = o i. o ! 5 1 4 î 9 1 ----- *._rl._4.--!-_<—;_ permut <— Faux Pour i de i à p faire i=3! i o 2 4 5 9 Si (V[i]>V[i+i]) alorslrl|.^_.-..f.-.f . . aux^- V[i],V[i]^- V[i+i],V[i+i] «- aux permut <— Vraii=5Î * ,. ° I 2 L_l_l_5__l--9_. Fin Si Fin Pour p<-p-i Fin TantQue Fin.ASD 0 L. B. Roradhane; FSM.TN LU ASD e L. B. Romdhanc; FSM.TN L12
  4. 4. RI PAR INSERTION (1) Supposons que nous avons réussi à trier les k premiers éléments de la séquenceTri par InsertionInsertion Sort séquence triée séquence non encore triée • Ainsi, on augmente la taille de la séquence triée en lui ajoutant le premier élément de la séquence non triée; mais en linsérant directement dans sa bonne place séquence non encore triée tASD €> L. B. Romdhane; FSM.TN © L. B. Romdhane; FSM.TN RI PAR INSERTION (2) RI PAR INSERTION (3) procédure trilnsertion (V: Tableau[n] dentier) VAR permut : booléen; k, aux, p : entier insérer 6 insérer 1 Début Pour i de i à (n-i) faire 6 4 jf-i insérer 4 insérer 5 TantQue ((V[j] > x) ET (j>o)) faire 4 6 9 1 5 2 Fin TantQue insérer 9 insérer 2 x Fin Pour 4 6 9 I 5 2 Fin.ASD (D L. B. Koiudhane; KSM.TN 1,15 ASD » L. B. Romdbanc; FSM.TN
  5. 5. TRI PAR FUSION (1) • fTri Par Fusion Le principe du tri par fusion dune scqueiu <• NMerge Sort déléments est résumé comme su il • Si 5est vide ou contient un seul élément; elle est définition triée; donc on retourne S • sinon i. On divise S en deux séquences Si & Sz approximativement de même taille (11/2) ^. Récursivement; on effectue le tri de Si et le tri de Sz 3. On fusionne Si & Sz, en une seule séquence triée ASD FUSION (.) :l PAR FUSIOlvTfS) > f di , , . • J • II appel récursif diviser I 12 j Séquences dun élément : appel récursif = plus dappels récursifs p appel récumf ^ -" ***? «*"«•* Pour cette branche de larbre O L. B. Rondhcinc; KSM.TN
  6. 6. TRTPAR FUSION (5) 12 9 6 20 3 15 I 20 | 6 ! ,. ! appel récursif appel récursif appel récursif 12 9 diviser 9 9 i 12 fusion fusion © L. B. Romdhmic; KSM.TN L21 ASD > L. B. Romdhane; FSM.TN Fusior(6) RI PAR FUSION (7) Fonction triFusion (V: Vecteur) : Vecteur VAR Vi, V2 : Vecteur Début Si (taille(V) = o) ou (taille(V) = i)) alors retourner (V) y 6 20 •} 15 Sinon 6 I 9 j 12 | fusion [ 3 f 15 f 20 ! Diviser(V, Vi, Vz) Vi<— triFusion(Vi) L.M«—J-......1...«_J L_.~..._A.~_...^L_a._.b.l Va<— triFusion(V2) V<- fusion (Vi, Vz) Retourner (V) FinSi Fin.ASl) » L. B. Romdhanc; FSM.TN L23 ASD © L. B. Romdhane; FSM.TN L24
  7. 7. TRI PAR FUSION (8) FUSION (9)• I ,a méthode diviser permet de diviser un vecteur de dimension n, en La méthode fusionner permet la fusion de deux deux vecteurs de dimension (0/2)Procédure Diviser (In V, InOut Vi, InOut Vz : Vecteur) : Vecteur séquences triées en une seule triée ! VAR k,m : entier e : élémentDébut ___ m <- taille (V) DIV 2 + taille(V) MOD 2 sa 3 Vi <— créerQ, Va <— créerQ, Pour k de i à m faire 3 6 e<— savoir_elem(k, v) Vi <— insérer(e, k, Vi) 3 6 9 Fin Pour Pour k de m+i à taille(V) faire 3 6 9 12 e*— savoir_elem(k, v) Va <— insérer(e, k-m, Vi) Fin Pour 9 12 15 20Fin. > L. B. Romdhanc; FSM.TN L25 ASD • L. B. Romdhaue; FSM.TNTRI PAR FUSION (10)Procédure fusionner(Vi, Vz : TantQue (i <= n) faire Vecteur) : Vecteur c<— savoir_elem(i, vi) V <-• insc4rer(e, k, V)VAR i, j, k, m, n : entier V : Vecteur ei, e2, e : élément k <• k ii i «- i n Tri Rapide lin Tjiil ()neDébut Quick Sort m <- taille (Vi), n «- taille (Va), k <- TantQue (j <= m) faire i e^- savoir_cleni(j, vi) V <— créerQ, i <— i, j <— i V (- insérur(e, k, V) TantQue ((i <= n) ET (j <= m)) faire k <-- k n ei<— savoirmelem(i, vi), ez <— j«-i+i savoir_elera(j, vz) Fin Tant Que Si (ei < es) alors e *— ei, i <— î +j sinon e «- ez, j 4- j+i retourner (V) Fin Si V <— insérer(e, k, V) Fin. k «— k +1 Fin Tant QueFin.ASD 0 L. B. Romdhanc; FSM.TN ASD © L. B. Romdhanc; FSM.TN L28
  8. 8. . H P e P S ^ -J^f~. ,V.T^=^^^^_TRI RAPIDE (1) JTRT=RAPIDE (2)• I ,c principe du tri rapide dune séquence S déléments est pivot résumé comme suit • Si S est vide ou contient un seul élément; elle est par définition triée, donc retourner S partitionnement • sinon 1. On choisit (aléatoirement) un élément de S comme étant le pivot 2. 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 appel récursif • Sz contient tous les éléments égaux au pivot • £3 contient tous les éléments supérieurs au pivot 3. Récursivement; trier Si & 83 3 Séquence dun élément : plus dappels 4. Concaténer dans cet ordre : Si, S2 & £3 récursifs pour cette branche de larbreASD 6 L. B. Romdhanc; FSM.TN L O L. B. Roiudhanc; FSM.TN L30 r^v^i^^^^;^^^^ - •• =--"= ^TftTRAPIDE (4) pivot 12 9 20 3 15 partitionnementASD !.. B. Romdhanc; FSM.TN ASD L. B. Romdhanc; FSM.TN
  9. 9. TRI RAPIDE (5) 12 9 20 15 12 9 6 20 3 15 c appel récuisif j j appel récursif LU 12SLJ concaténation concaténationASD © L. B. Ron>dh:iiic; KSM.IN © L. B. Romdhane; FSM.TNTRTRÂPIDE (7) RI RAPIDE (8) fonction triRapide (V: Vecteur) : Vecteur VAR Vi, Vz, V3 : Vecteur m : élément Début ££ Si (taille(V) - o) ou (taille(V) = i)) alors retourner (V) Sinon m <— choisirPivot(V) DiviserPivot(V, m Vi, Vz, V3) • • | Vi<- triRapide(Vi) concaténation V3^- triRapide(V3) V<- concat(Vi, V2> V3) Retourner (V) FinSi Fin.ASD © L. B. Romdhane; FSM.TN L)S ASD © L. B. Romdhane; FSM.TN L36
  10. 10. TRI RAPIDE (9) ,omparaisonDivision Concaténationjimi-iilure DiviserPivot (V: Vecteur, pivot : rlrmi-nt; InOut Vi, Vî, Vj : Vecteur) fonction Concat (Vi, Vz, V% : Vecteur) : Vecteur |j|lï|ffliij>Iexité nioyentianj VAK i, j, k. 1 : entier VAR i, j : entier X : élément V : VecteurDébut Début Sélection 0(n*) O(n2) Pour i de i à taiile(V) faire x <— savoir dem(V, i) Pour i de i à taille(Vi) faire x <_ savoir elem(Vt i) Bulle 0(n*) O(n2) si (x < pivot) alors i<-i«, V<- insérer(x, j, V) vr^LérerKk.v.) «n Pour _ Insertion O(n*) 0(n>) «non si (x > pivot) alors P°ur ^ a taille(V2) faire )^_ j + t V3 <- insérer(x, 1, V 3 ) x <- savoir_elem{Vz, i) )<- i«. v <~ insérer(«, j, V) Fusion O(n log(n)) 0(nlog(n)r smon Fin Pour * divide & conquer j<-j« Pour i de i à taillc(V3) faire FnS Fi"s j< - J F - I , V<~ insércr(x,j, V) Fin Pour Rapide OM O(n log(n)) FinPour retourner (V) divide & conquerFln - Fin.ASD 0 L. B. Roradhane; FSM.TN L37 ASD C L. B. Romdbanc; FSM.TN L 38

×