Download - Ch5 Algorthmique Avancée - Algorithme de Tri

Transcript
Page 1: 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

Page 2: Ch5 Algorthmique Avancée - Algorithme de Tri

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

Page 3: Ch5 Algorthmique Avancée - Algorithme de Tri

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

Page 4: Ch5 Algorthmique Avancée - Algorithme de Tri

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

Page 5: Ch5 Algorthmique Avancée - Algorithme de Tri

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

Page 6: Ch5 Algorthmique Avancée - Algorithme de Tri

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

Page 7: Ch5 Algorthmique Avancée - Algorithme de Tri

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

Page 8: Ch5 Algorthmique Avancée - Algorithme de Tri

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

Page 9: Ch5 Algorthmique Avancée - Algorithme de Tri

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

Page 10: Ch5 Algorthmique Avancée - Algorithme de Tri

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