Algorithmique et Programmation, IMA 3

22
Algorithmique et Programmation, IMA 3 Cours 5b Algos de tri Université Lille 1 - Polytech Lille

Transcript of Algorithmique et Programmation, IMA 3

Page 1: Algorithmique et Programmation, IMA 3

Algorithmique et Programmation, IMA 3Cours 5b Algos de tri

Université Lille 1 - Polytech Lille

Page 2: Algorithmique et Programmation, IMA 3

Trions !

Considérations diverses sur les tris

Page 3: Algorithmique et Programmation, IMA 3

Énoncé du problème

ButI On va trier des tableaux d’entiers de taille N .I On dispose du test de comparaison entre entiers

Exemple :11 -2 1515 42 2048 28 11 -78

devient-78 -2 11 11 28 42 1515 2048

I Let’s go !I Attention transparents sans exemple ni dessin, donc, enfaire !

Page 4: Algorithmique et Programmation, IMA 3

Action auxillaire

On dispose de l’action auxilliaire permuter de signature (ouprototype) :permuter(T:Tableau[N] d’Entiers,ind1:Entier,ind2:Entier)

qui permute les valeurs des éléments d’indices ind1 et ind2 dutableau T .

Page 5: Algorithmique et Programmation, IMA 3

Tri Sélection

Principe :

I Je cherche le minimum du tableau et je le permute avec lacase d’indice 0.

I Je cherche le minimum du tableau restant (le sous tableauT [1..N − 1]) et je le permute avec la case indice 1

I Je cherche .....

I Algo, Correction, Complexité

Page 6: Algorithmique et Programmation, IMA 3

Sélection

Action tri-sélection(T)D/R: T : Tableau[N] d’entiersL: ideb,i : EntiersL: imin : Entier Indice de l’élément minimum courantPour ideb de 0 à N-2 Faire

Recherche de l’indice de l’élément minimumimin := ideb;Pour i de ideb + 1 à N-1 Faire

Si T[i] < T[imin] alorsimin := i

FsiFpourpermuter(T,ideb,imin)

FpourFAction

Page 7: Algorithmique et Programmation, IMA 3

Sélection : analyse

Correction : « L’algorithme tri-selection conserve les élémentsdu tableau T et les trie dans l’ordre croissant »

Invariant : « à la fin du tour ideb, le sous-tableau T [0..ideb]contient les ideb + 1 plus petits éléments de T, dans l’ordrecroissant de leurs valeurs »

Coût (nb comparaisons) : (N − 1) + (N − 2) + . . . 1 = O(N2).

Page 8: Algorithmique et Programmation, IMA 3

Tri Insertion

«Tri des cartes à jouer» :

I Je trie les 2 premières cartes.I Je regarde la troisième et l’insère à sa bonne place (par

décalages vers la droite).I . . .

I Algo, Correction, Complexité

Page 9: Algorithmique et Programmation, IMA 3

Insertion

Action tri-insertion(T)D/R: T : Tableau[N] d’entiersL: i : EntierL: élt : Entier Valeur à insérerL: ins : Entier Indice d’insertion de éltPour i de 1 à N-1 Faire

élt := T[i] Initialisationins := iTq (ins > 1 et T[ins-1] > élt) faire

T[ins] := T[ins-1];ins := ins - 1

FtqT[ins] := élt Insertion de T[i]

FpourFAction

Page 10: Algorithmique et Programmation, IMA 3

Insertion : analyse

Correction : on prouve l’invariant suivant : « Au tour i, la boucleinsère l’élément T [i] dans le sous-tableau T [0..i− 1] déjà trié »

Coût : O(N) au mieux, O(N2) au pire et en moyenne.Améliorable en N ln2(N).

Page 11: Algorithmique et Programmation, IMA 3

Tri Fusion

Principe «diviser pour régner» :I Un tableau de taille 1 est trié !I Je découpe en deux le tableauI Je trie chacun des sous-tableauxI Je fusionne

I Algo récursif !, Correction, Complexité

Page 12: Algorithmique et Programmation, IMA 3

Tri Fusion - 1

Action tri-fusion-bis(T,premier,dernier)D: premier,dernier : EntiersD: T : Tableau[N] d’entiersL: milieu : entierSi premier<dernier alors

milieu← (premier+dernier)/2tri-fusion-bis(T,premier,milieu) Appel récursif 1tri-fusion-bis(T,milieu+1,dernier) Appel réc. 2fusion(T,premier,milieu,dernier)

FsiFAction

Page 13: Algorithmique et Programmation, IMA 3

Tri Fusion - 2

Action tri-fusion(T)D: T : Tableau[N] d’entiersSi N>1 alors

tri-fusion-bis(T,0,N-1)Fsi

FAction

I Il reste à écrire fusion.

Page 14: Algorithmique et Programmation, IMA 3

Tri Fusion - 3

Dessin ! On va garder en mémoire deux curseurs, c1 et c2, surchacun des bouts de tableaux à fusionner.Action fusion(T,premier1,dernier1,dernier2)

D: premier1,dernier1,dernier2 : EntiersD: T : Tableau[N] d’entiersL: fus : Tableau[dernier2-premier1+1] d’entiersL: c1,c2,premier2 : Entierspremier2 := dernier1+1c2 := premier2c1 := premier1... suite page suivante ...

FAction

Page 15: Algorithmique et Programmation, IMA 3

Tri Fusion - 4

Parcours de fusion : le tableau local fus est rempli, puis recopiédans le tableau initial.Pour i de 0 à dernier2-premier1 Faire

Si (c16dernier1 et (t[c1]<t[c2] ou c2> dernier2)) alorsfus[i]← t[c1]c1++

Sinonfus[i]← t[c2]c2++

FsiFpourPour i de 0 à dernier2-premier1 Faire

t[premier1+i]← fus[i]Fpour

Page 16: Algorithmique et Programmation, IMA 3

Fusion : analyse

On suppose que fusionne fait bien son travailCorrection : « l’appel à tri-fusion sur un tableau de taille i trie letableau »

Coût : O(N ln2N) tout le temps. preuve au tableau

Page 17: Algorithmique et Programmation, IMA 3

Tri Rapide

Principe du pivotI Je partitionne le tableau en fonction d’un pivot (premier

élement du tableau).I Je trie récursivement sur chacun des tableaux à sa gauche

et à sa droite.I Algo, Correction, Complexité, en TD !

Page 18: Algorithmique et Programmation, IMA 3

Trions !

Considérations diverses sur les tris

Page 19: Algorithmique et Programmation, IMA 3

Tri de tableaux

ThéorèmeUn tri de tableaux d’entiers par comparaisons ne peut êtreréalisé en o(n ln2 n) comparaisons en moyenne et dans le piredes cas.I Un tri est alors optimal si il a une complexité de Ω(n ln2 n)en moyenne et dans le pire des cas.

Page 20: Algorithmique et Programmation, IMA 3

Tri de tableaux - récapitulatif

On évalue le nombre de comparaisons

Algorithme Meilleur des cas En moyenne Pire des casTri par sélection O(N2) O(N2) O(N2)Tri par insertion O(N) O(N2) O(N2)Tri fusion O(N × ln2(N)) O(N × ln2(N)) O(N × ln2(N))Tri rapide O(N × ln2(N)) O(N × ln2(N)) O(N2)

Page 21: Algorithmique et Programmation, IMA 3

Un tri linéaire !

Et si on connaît à l’avance les valeurs des éléments ?Exemple : tri comptage (ou tri par casiers) :

I On crée autant de casiers que de valeurs possiblesI On compte les occurrences de ces valeursI On utilise pour trier

Exemple : 1 10 3 1 3

Tableau d’occurences :2 0 2 0 3 0 0 0 0 1

et finalement :1 1 3 3 10

Page 22: Algorithmique et Programmation, IMA 3

Caractères stable et en place

StableUn algo de tri est stable si deux valeurs identiques restentdans le même "ordre" à la fin de l’algo.

En placeUn algo de tri est en place si il trie sans création d’un tableauauxiliaire.

I Les algorithmes insertion, sélection sont en place