quelques repères -...

20
Les algorithmes de tri Quelques repères Etienne Poulin pour ISN Décembre 2013

Upload: dangdien

Post on 10-Sep-2018

216 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Quelques repères - infos41.pagesperso-orange.frinfos41.pagesperso-orange.fr/SCSE/ISN/...algorithmes_presentation.pdf · Les algorithmes de tri Quelques repères Etienne Poulin pour

Les algorithmes de tri

Quelques repères

Etienne Poulin pour ISN – Décembre 2013

Page 2: Quelques repères - infos41.pagesperso-orange.frinfos41.pagesperso-orange.fr/SCSE/ISN/...algorithmes_presentation.pdf · Les algorithmes de tri Quelques repères Etienne Poulin pour

TRI ÉLÉMENTAIRE ALGORITHMES SIMPLES

Page 3: Quelques repères - infos41.pagesperso-orange.frinfos41.pagesperso-orange.fr/SCSE/ISN/...algorithmes_presentation.pdf · Les algorithmes de tri Quelques repères Etienne Poulin pour

1 - Le tri par insertion

principe du tri par insertion : insérer à la n-ième itération le n-ième élément

à la bonne place.

Pseudo code PROCEDURE Tri_Insertion (Tableau a[1,n])

pour i variant de 2 à n faire INSERER a[i] à sa place dans a[1:i-1];

FIN PROCEDURE

Complexité : Dans le pire des cas, les parcours successifs du tableau imposent d'effectuer (n-1)+(n-2)+(n-3)..+1 comparaisons. Le nombre total de comparaisons est donc majoré par n*(n-1)/2 . On peut donc dire que la complexité en moyenne et dans le pire des cas du tri par insertion est en O(n2).

Page 4: Quelques repères - infos41.pagesperso-orange.frinfos41.pagesperso-orange.fr/SCSE/ISN/...algorithmes_presentation.pdf · Les algorithmes de tri Quelques repères Etienne Poulin pour

2 - Le tri par sélection

Principe du tri par sélection/échange (ou tri par extraction) : aller chercher le plus petit élément du tableau

pour le mettre en premier, puis de repartir du second élément et d'aller chercher le plus petit élément du tableau pour le mettre en second, etc...

La complexité du tri par sélection est en O(n2) dans tous les cas, le nombre d'exécutions de la boucle interne étant n(n-1)/2.

Page 5: Quelques repères - infos41.pagesperso-orange.frinfos41.pagesperso-orange.fr/SCSE/ISN/...algorithmes_presentation.pdf · Les algorithmes de tri Quelques repères Etienne Poulin pour

Le tri par sélection

PRODECURE Tri_Selection (Tableau a[1:n]) VARIABLE indice_max : ENTIER; POUR i VARIANT DE 1 A n-1 FAIRE indice_max <- i; POUR j VARIANT DE i+1 A N FAIRE SI a[j]<max ALORS indice_max <- j; FIN POUR echanger a[i] et a[indice_max]; FIN POUR FIN PROCEDURE

Page 6: Quelques repères - infos41.pagesperso-orange.frinfos41.pagesperso-orange.fr/SCSE/ISN/...algorithmes_presentation.pdf · Les algorithmes de tri Quelques repères Etienne Poulin pour

3 – Le tri bulle

Principe du tri bulle (bubble sort) : comparer deux à deux les éléments e1 et e2

consécutifs d'un tableau et d'effecteur une permutation si e1 > e2. On continue de trier jusqu'à ce qu'il n'y ait plus de permutation.

PRODECURE Tri_bulle (Tableau a[1:n]) VARIABLE permut : Booleen; REPETER permut = FAUX POUR i VARIANT DE 1 à N-1 FAIRE SI a[i] > a[i+1] ALORS echanger a[i] et a[i+1] permut = VRAI FIN SI FIN POUR TANT QUE permut = VRAI FIN PROCEDURE

La complexité dans le pire des cas du tri bulle est en O(n2).

Page 7: Quelques repères - infos41.pagesperso-orange.frinfos41.pagesperso-orange.fr/SCSE/ISN/...algorithmes_presentation.pdf · Les algorithmes de tri Quelques repères Etienne Poulin pour

TRIS AVANCÉS

Page 8: Quelques repères - infos41.pagesperso-orange.frinfos41.pagesperso-orange.fr/SCSE/ISN/...algorithmes_presentation.pdf · Les algorithmes de tri Quelques repères Etienne Poulin pour

4 - Le tri fusion (MergeSort)

Principe (diviser pour régner): On divise en deux moitiés la liste à trier

(en prenant par exemple, un élément sur deux pour chacune des listes).

On trie chacune d’entre elles.

On fusionne les deux moitiés obtenues pour reconstituer la liste triée.

La complexité dans le pire des cas du tri fusion est en log2(n).

Page 9: Quelques repères - infos41.pagesperso-orange.frinfos41.pagesperso-orange.fr/SCSE/ISN/...algorithmes_presentation.pdf · Les algorithmes de tri Quelques repères Etienne Poulin pour

5 – Tri rapide

Les noms du tri rapide

tri de Hoare (du nom de son inventeur)

tri par segmentation

tri des bijoutiers

Quicksort en anglais

l’algorithme de tri interne le plus efficace a priori.

Page 10: Quelques repères - infos41.pagesperso-orange.frinfos41.pagesperso-orange.fr/SCSE/ISN/...algorithmes_presentation.pdf · Les algorithmes de tri Quelques repères Etienne Poulin pour

Tri rapide

Principe ordonner le tableau T.(0)..T.(n) en cherchant dans celui-

ci une clé pivot autour de laquelle réorganiser ses éléments. Il est souhaitable que le pivot soit aussi proche que possible de la

clé relative à l’enregistrement central du tableau, afin qu’il y ait à peu près autant d’éléments le précédant que le suivant, soit environ la moitié des éléments du tableau.

On permute ceux-ci de façon à ce que pour un indice j particulier tous les éléments dont la clé est inférieure à pivot se trouvent dans T.(0)...T.(j) et tous ceux dont la clé est supérieure se trouvent dans T.(j+1)...T.(n).

On applique ensuite le tri récursivement à T.(1)..T.(j-1) et T.(j+1)..T(n) afin de trier ces deux segments de tableau. Comme tous les éléments du premier segment ont une clé inférieure ou égale à ceux du second, le tableau sera ainsi entièrement trié.

Page 11: Quelques repères - infos41.pagesperso-orange.frinfos41.pagesperso-orange.fr/SCSE/ISN/...algorithmes_presentation.pdf · Les algorithmes de tri Quelques repères Etienne Poulin pour

Tri rapide

Dans le tri rapide, le choix du pivot est essentiel. Dans l’implémentation ci-dessus, on se contente de prendre l’élément situé au milieu de la partie à diviser. Mais d’autres stratégies sont possibles.

La complexité dans le pire des cas du tri rapide est en O(n2).

Page 12: Quelques repères - infos41.pagesperso-orange.frinfos41.pagesperso-orange.fr/SCSE/ISN/...algorithmes_presentation.pdf · Les algorithmes de tri Quelques repères Etienne Poulin pour

ALGORITHMES RÉCURSIFS

Page 13: Quelques repères - infos41.pagesperso-orange.frinfos41.pagesperso-orange.fr/SCSE/ISN/...algorithmes_presentation.pdf · Les algorithmes de tri Quelques repères Etienne Poulin pour

Algorithmes récursifs

Un algorithme est dit récursif s'il s'appelle lui-même.

Image : http://www.video-tuts.fr/tutorial-php/recursivite,t2874.html, [en ligne], [pages consultées le 23/11/2013]

Image : http://ressources.unisciel.fr/algoprog/s33recur/emodules/rc00macours1/co/rc00acours1.html, [en ligne], [pages consultées le 23/11/2013]

Page 14: Quelques repères - infos41.pagesperso-orange.frinfos41.pagesperso-orange.fr/SCSE/ISN/...algorithmes_presentation.pdf · Les algorithmes de tri Quelques repères Etienne Poulin pour

Un exemple emblématique : la factorielle Rappel :

Pseudo code : PROCEDURE factorielle(entier k) : si k=0 alors renvoyer 1 sinon renvoyer k * factorielle(k-1) finsi FIN PROCEDURE

1221! nnnn

Page 15: Quelques repères - infos41.pagesperso-orange.frinfos41.pagesperso-orange.fr/SCSE/ISN/...algorithmes_presentation.pdf · Les algorithmes de tri Quelques repères Etienne Poulin pour

REVENONS AUX ALGORITHMES DE TRI…

Page 16: Quelques repères - infos41.pagesperso-orange.frinfos41.pagesperso-orange.fr/SCSE/ISN/...algorithmes_presentation.pdf · Les algorithmes de tri Quelques repères Etienne Poulin pour

Le tri par insertion

Pseudo code

sous une forme récursive : PROCEDURE Tri_Insertion (Tableau a[1:n]) SI n > 1 ALORS Tri_Insertion(a[1:n-1]); INSERER (a[n],a[1:n-1]); FIN SI FIN PROCEDURE

Page 17: Quelques repères - infos41.pagesperso-orange.frinfos41.pagesperso-orange.fr/SCSE/ISN/...algorithmes_presentation.pdf · Les algorithmes de tri Quelques repères Etienne Poulin pour

Le tri par sélection

Sous une forme récursive : PRODECURE Tri_Selection (Tableau a[1:n]) SOIT i l'indice d'un élément de clé minimale dans a Echanger les éléments a[1] et a[i] Tri_Selection(a[2:n]); FIN PROCEDURE

Page 18: Quelques repères - infos41.pagesperso-orange.frinfos41.pagesperso-orange.fr/SCSE/ISN/...algorithmes_presentation.pdf · Les algorithmes de tri Quelques repères Etienne Poulin pour

Le tri rapide

forme récursive : PRODECURE tri_rapide (T, debut, fin) T : tableau d’entiers début, fin : entiers ipivot entier si début=fin-1 alors si T[debut]>T[fin] faire Permuter(T,debut,fin) Fin si sinon si (debut<fin) alors ipivot prend la valeur partition(T,debut,fin) tri_rapide(T,debut,ipivot-1) tri rapide(T,ipivot+1,fin) Fin si Fin si FIN PROCEDURE Remarque : la fonction partition place l'élément d'indice premier du tableau à la bonne place, et retourne l'indice de placement (ipivot)

Page 19: Quelques repères - infos41.pagesperso-orange.frinfos41.pagesperso-orange.fr/SCSE/ISN/...algorithmes_presentation.pdf · Les algorithmes de tri Quelques repères Etienne Poulin pour

Sources

CNAMOS CNAM, Algorithmique et programmation. [en ligne] Disponibilité et accès : http://lwh.free.fr/pages/algo/tri/tri_rapide.htm, [en ligne], [pages consultées le 23/11/2013]

Wikipedia, Algorithme récursif. [en ligne] Disponibilité et accès : http://fr.wikipedia.org/wiki/Algorithme_r%C3%A9cursif, [en ligne], [pages consultées le 23/11/2013]

Page 20: Quelques repères - infos41.pagesperso-orange.frinfos41.pagesperso-orange.fr/SCSE/ISN/...algorithmes_presentation.pdf · Les algorithmes de tri Quelques repères Etienne Poulin pour

A VOUS DE JOUER …

Programmer en C

-Un algorithme simple

-Un algorithme sous forme récursif