algorithmique et programmation, ima 3
TRANSCRIPT
![Page 1: Algorithmique et Programmation, IMA 3](https://reader031.vdocuments.mx/reader031/viewer/2022012420/6174fce9854181567f0bee09/html5/thumbnails/1.jpg)
Algorithmique et Programmation, IMA 3Cours 5b Algos de tri
Université Lille 1 - Polytech Lille
![Page 2: Algorithmique et Programmation, IMA 3](https://reader031.vdocuments.mx/reader031/viewer/2022012420/6174fce9854181567f0bee09/html5/thumbnails/2.jpg)
Trions !
Considérations diverses sur les tris
![Page 3: Algorithmique et Programmation, IMA 3](https://reader031.vdocuments.mx/reader031/viewer/2022012420/6174fce9854181567f0bee09/html5/thumbnails/3.jpg)
É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](https://reader031.vdocuments.mx/reader031/viewer/2022012420/6174fce9854181567f0bee09/html5/thumbnails/4.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022012420/6174fce9854181567f0bee09/html5/thumbnails/5.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022012420/6174fce9854181567f0bee09/html5/thumbnails/6.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022012420/6174fce9854181567f0bee09/html5/thumbnails/7.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022012420/6174fce9854181567f0bee09/html5/thumbnails/8.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022012420/6174fce9854181567f0bee09/html5/thumbnails/9.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022012420/6174fce9854181567f0bee09/html5/thumbnails/10.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022012420/6174fce9854181567f0bee09/html5/thumbnails/11.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022012420/6174fce9854181567f0bee09/html5/thumbnails/12.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022012420/6174fce9854181567f0bee09/html5/thumbnails/13.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022012420/6174fce9854181567f0bee09/html5/thumbnails/14.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022012420/6174fce9854181567f0bee09/html5/thumbnails/15.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022012420/6174fce9854181567f0bee09/html5/thumbnails/16.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022012420/6174fce9854181567f0bee09/html5/thumbnails/17.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022012420/6174fce9854181567f0bee09/html5/thumbnails/18.jpg)
Trions !
Considérations diverses sur les tris
![Page 19: Algorithmique et Programmation, IMA 3](https://reader031.vdocuments.mx/reader031/viewer/2022012420/6174fce9854181567f0bee09/html5/thumbnails/19.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022012420/6174fce9854181567f0bee09/html5/thumbnails/20.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022012420/6174fce9854181567f0bee09/html5/thumbnails/21.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022012420/6174fce9854181567f0bee09/html5/thumbnails/22.jpg)
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