Ch5 Algorthmique Avancée - Algorithme de Tri

10
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 cette sé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 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 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élection Sélection Sort ASD O L. B. Roradhane; FSM.TN

Transcript of Ch5 Algorthmique Avancée - Algorithme de Tri

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