plan du chapitre i. introduction ii. rappel iii. le tri shell iv. le tri par fusion v. applications

29

Upload: felice-roux

Post on 03-Apr-2015

103 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Plan du chapitre I. Introduction II. Rappel III. Le tri Shell IV. Le tri par fusion V. Applications
Page 2: Plan du chapitre I. Introduction II. Rappel III. Le tri Shell IV. Le tri par fusion V. Applications

Plan du chapitre

I. Introduction

II. Rappel

III. Le tri Shell

IV. Le tri par fusion

V. Applications

Page 3: Plan du chapitre I. Introduction II. Rappel III. Le tri Shell IV. Le tri par fusion V. Applications

I. Introduction Qu'est-ce qu'un tri ? Un tri est une procédure qui permet de classer ou ordonner une série

d'éléments d'un type quelconque, selon un ordre croissant ou décroissant en utilisant un principe ou un algorithme formels donné. La série d’éléments est un tableau d’entiers par exemple.

En informatique ou en mathématiques, un algorithme de tri est un algorithme qui permet d'organiser une collection d'objets selon un ordre déterminé. Les objets à trier font donc partie d'un ensemble muni d'une relation d'ordre (de manière générale un ordre total). Les ordres les plus utilisés sont l’ordre numérique et l'ordre lexicographique (dictionnaire).

Suivant la relation d'ordre considérée, une même collection d’objet peut donner lieu à divers arrangements, pourtant il est possible de définir un algorithme de tri indépendamment de la fonction d’ordre utilisée. Celui-ci ne fera qu'utiliser une certaine fonction d’ordre correspondant à une relation d’ordre qui doit permettre de comparer tout couple d'éléments de la collection.

Page 4: Plan du chapitre I. Introduction II. Rappel III. Le tri Shell IV. Le tri par fusion V. Applications

Complexité des algorithmes de tris

La complexité des algorithmes de tris varie selon la méthode utilisée. Pour cela plusieurs algorithmes de tris existent qui n'ont pas tous la même complexité

Page 5: Plan du chapitre I. Introduction II. Rappel III. Le tri Shell IV. Le tri par fusion V. Applications

Quel sont les particularités des tris

Tris itératifsTris récursifs

Page 6: Plan du chapitre I. Introduction II. Rappel III. Le tri Shell IV. Le tri par fusion V. Applications

TRIS ITERATIFS

Quelles sont les particularités des tris itératifs ? Dans un tri itératif, on procède de manière itérative !

C'est-à-dire que l'on trie le tableau d'un seul bloc, en le parcourant élément par élément, case par case. Il y a en fait deux principes différents :

se déplacer de la première à la dernière case, en y plaçant à chaque fois l'élément qui doit y aller : c'est le tri par sélection et tri à bulle),

inversement, prendre chaque élément dans l'ordre où il se présente, et le mettre à la bonne place : c'est le tri par insertion et tri Shell

Page 7: Plan du chapitre I. Introduction II. Rappel III. Le tri Shell IV. Le tri par fusion V. Applications

II. Rappel

1. Tri par sélection

2. Tri à bulles

3. Tri par insertion

Page 8: Plan du chapitre I. Introduction II. Rappel III. Le tri Shell IV. Le tri par fusion V. Applications

3. Tri par insertion

Principe Simulation Résolution de problèmes Complexité

Page 9: Plan du chapitre I. Introduction II. Rappel III. Le tri Shell IV. Le tri par fusion V. Applications

Principe

Le tri par insertion est le tri le plus efficace sur des listes de petite taille. C'est pourquoi il est utilisé par d'autres méthodes comme le tri rapide (ou quicksort). Il est d'autant plus rapide que les données sont déjà triées en partie dans le bon ordre.

Le principe de ce tri est très simple: c'est le tri que toute personne utilise naturellement quand elle a des dossiers, des cartes (ou n'importe quoi d'autre) à classer. On prend un dossier et on le met à sa place parmi les dossiers déjà triés. Puis on recommence avec le dossier suivant.

Page 10: Plan du chapitre I. Introduction II. Rappel III. Le tri Shell IV. Le tri par fusion V. Applications

Pour procéder à un tri par insertion, il suffit de suivre l’algorithme formel suivant: Parcourir une liste : on considère que les (i-1) premiers éléments de

la liste sont triés et placer le ième élément à sa place parmi les (i-1) déjà triés.

Répéter cette action jusqu’à atteindre la fin de la liste Pour insérer le ième élément à sa place utiliser une variable

intermédiaire tmp pour conserver la valeur à insérer puis, Déplacer les éléments tab[i-1],tab[i-2],… vers la droite tant que leur

valeur est supérieure à celle de tmp. Affecter alors à l’emplacement dans le tableau laissé libre par le

décalageà droite la valeur de tmp.Remarques: On peut aussi faire une recherche par dichotomie sur les tableaux. Une amélioration possible de ce tri, sensible pour les listes de plus

de 15 éléments, est le tri de Shell.

Page 11: Plan du chapitre I. Introduction II. Rappel III. Le tri Shell IV. Le tri par fusion V. Applications

Simulation

Fixe Dynamique

Page 12: Plan du chapitre I. Introduction II. Rappel III. Le tri Shell IV. Le tri par fusion V. Applications

Simulation fixe

2 1 8 4 3 6

On procède à trier ce tableau par ordre croissant.Le sous-vecteur constitué du premier élément seul est évidemment trié! On peut donc considérer que notre problème se ramène à deux vecteurs, un trié de longueur 1 et un non trié de longueur 6-1.Etape1On cherche la position d’insertion de l’élément d’indice 2 dans la 1ère partie du tableau dans l’ordre convenablepuisque 2>1: on garde la valeur de l’élément en cours dans la variable tmp On décale à droite d’un pas la première case et mettre la valeur de tmp à la 1ère case:

2 1 8 4 3 6 1

Tmp

1 2 8 4 3 6

Soit le tableau non-trié à 6 composantes suivante:

Page 13: Plan du chapitre I. Introduction II. Rappel III. Le tri Shell IV. Le tri par fusion V. Applications

Etape2:On traite à présent la troisième composante de valeur 8. 8 est plus grand que 2 et ne doit donc pas bouger. La nouvelle situation est alors:

Etape3:On cherche la position d’insertion du l’élément d’indice 4 dans la 1ère partie du tableau dans l’ordre convenableon garde la valeur de l’élément en cours dans la variable tmp On décale à droite d’un pas l’élément n°3,…jusqu’à avoir un

élément inférieur à 4 Affecter à la dernière case décalée la valeur de tmp

1 2 8 4 3 6

1 2 8 4 3 6 4

Tmp

1 2 4 8 3 6

Page 14: Plan du chapitre I. Introduction II. Rappel III. Le tri Shell IV. Le tri par fusion V. Applications

Etape4:On cherche la position d’insertion du l’élément d’indice 5 dans la 1ère partie du tableau dans l’ordre convenableon garde la valeur de l’élément en cours dans la variable tmp

On décale à droite d’un pas l’élément n°4,…jusqu’à avoir un élément inférieur à 3

Affecter à la dernière case décalée la valeur de tmp

Etape4:On cherche la position d’insertion de l’élément d’indice 5 dans la 1ère partie du tableau dans l’ordre convenableon garde la valeur de l’élément en cours dans la variable tmp

On décale à droite d’un pas l’élément n°4,…jusqu’à avoir un élément inférieur à 3

Affecter à la dernière case décalée la valeur de tmp

1 2 4 8 3 6

Tmp

31 2 3 4 8 6

1 2 3 4 8 6 6

Tmp

1 2 4 3 6 8

Page 15: Plan du chapitre I. Introduction II. Rappel III. Le tri Shell IV. Le tri par fusion V. Applications

Tri par insertionRésolution du problème

Tri insertion

Saisie(n) Remplir(n,T) Affiche(n,T)Trier (n,T)

Procédure

Procédure

Procédure

Procédure

Décomposition modulaire

DECALER(T, Deb,fin)

Procédure

Page 16: Plan du chapitre I. Introduction II. Rappel III. Le tri Shell IV. Le tri par fusion V. Applications

Tri par insertionRésolution du problème

Analyse du programme Principal:

Résultat: L’affichage du tableau trié est la tâche de la procédure afficher

Traitement:- Pour trier le tableau on appelle la procédure trier- Le tableau est rempli grâce à la procédure remplir- Le nombre des éléments à remplir est donné par la procédure saisir

Page 17: Plan du chapitre I. Introduction II. Rappel III. Le tri Shell IV. Le tri par fusion V. Applications

Tri par insertionRésolution du problème

Algo du Programme Principal

0) Début tri_ins1)Saisie(n)2)remplir(T,n)3)Trier(T,n)4)Affiche(T,n)5)Fin tri_ins

Page 18: Plan du chapitre I. Introduction II. Rappel III. Le tri Shell IV. Le tri par fusion V. Applications

Analyse de la procédure trier Résultat: T trié Traitement: D’après l’algorithme formel de cette méthode il s’agit d’un traitement

répétitif complet de l’élément n°2 jusqu’au dernier élément du tableau: Pour I de 2 à n faire

Pour chaque valeur du compteur et si l’élément correspondant n’est pas à sa place, nous réalisons les actions suivantes: Ranger la valeur de T[I] dans la variable Tmp Décaler vers la droite les valeurs de T[i-1],T[i-2],… jusqu’à

arriver à une valeur qui est inférieure à T[c]. Cette action est réalisée par la procédure DECALER.

Affecter au dernier élément décalé la valeur de Tmp Si T[i-1] > T[i] alors TmpT[i] DECALER (T,i-1,p) T[p+1]Tmp Finsi

Page 19: Plan du chapitre I. Introduction II. Rappel III. Le tri Shell IV. Le tri par fusion V. Applications

Algorithme de la procédure trier

0) procedure trier(n:entier; var t:tab)

1) Pour i de 2 à n faire

Si T[i-1] > T[i] alors

TmpT[i]

DECALER (T,i-1,p)

T[p+1]Tmp

Finsi

Finpour

2) Fin trier

Page 20: Plan du chapitre I. Introduction II. Rappel III. Le tri Shell IV. Le tri par fusion V. Applications

Spécification de la procédure décaler

Algorithme

Résultat:décaler à droite les éléments du tableau T d’indice deb à l’indice fin

Traitement:

Il s’agit d’un traitement répétitif à condition d’arrêt:

Tant que (fin>=1) et (T[fin]>tmp) faire initialisation:findebAction de décalage: T[fin+1]T[fin]Décrémentation de la variable fin par 1:finfin-1

0) procedure DECALER(var t:tab;deb:entier; varfin: entier)

1) Fin deb

Tant que (fin>=1) et (T[fin]>tmp) faire

T[fin+1]T[fin]

finfin-1

Fin tantque

2) Fin DECALER

Page 21: Plan du chapitre I. Introduction II. Rappel III. Le tri Shell IV. Le tri par fusion V. Applications

Complexité Comme nous l'avons vu ci-dessus, le tri par insertion

linéaire est, en moyenne, essentiellement d'ordre n2. (puisque il utilise 2 boucles imbriquées d’ordre n). Il est toutefois évident que si le vecteur est déjà presque trié dans le bon ordre, le nombre d'opérations sera beaucoup plus réduit. Il suffit pour s'en convaincre de réfléchir au tri par insertion linéaire d'un vecteur déjà complètement trié: pour chaque élément, une seule comparaison sera nécessaire pour déterminer à quelle place il doit se mettre. Dans ces conditions, on n'a à effectuer que environ n opérations.

Ces considérations ont amené à envisager des méthodes de tri qui permettent de déplacer les éléments à trier de plus d'une case à la fois obtenant ainsi un tri préliminaire rapide qui regroupe en tête du vecteur les petits éléments, et en fin de vecteur, les grandes valeurs. Ce pré-tri permet alors d'accélérer sensiblement la suite des opérations c’est le tri Shell

Page 22: Plan du chapitre I. Introduction II. Rappel III. Le tri Shell IV. Le tri par fusion V. Applications

Tri SHELL

Imaginé par D. L. Shell  (1959) Ce tri est une accélération du tri par insertion.

Dans le tri par insertion, un élément va à sa place en progressant lentement, case par case. L'accélération consiste à le faire aller à sa place en commençant par faire des grands pas, puis des pas de plus en plus petits, jusqu'à, évidemment, des pas de 1 pour que le tableau soit trié.

Page 23: Plan du chapitre I. Introduction II. Rappel III. Le tri Shell IV. Le tri par fusion V. Applications

L'étape de base de l'algorithme considère le tableau initial constitué de P sous-tableaux, dont les éléments sont distants de P cases. ces P tableaux sont triés par l'algorithme de tri par insertion. On dit alors que le tableau initial est P-trié.

On répète cette opération de base pour des valeurs de P qui vont en diminuant jusqu'à une valeur finale 1.

La qualité du tri Shell va dépendre de la suite des valeurs de P. Une "bonne" suite est donnée par : 

P1=1

Pk+1=3*Pk+1

Principe Tri SHELL

Page 24: Plan du chapitre I. Introduction II. Rappel III. Le tri Shell IV. Le tri par fusion V. Applications

Tri SHELL …Exemple

On se propose d’utiliser la méthode de tri Shell pour trier un tableau T en ordre croissant.

Considérons le tableau T contenant les 5 éléments suivants:

T= 13 10 20 5 11

  1 2 3 4 5

Page 25: Plan du chapitre I. Introduction II. Rappel III. Le tri Shell IV. Le tri par fusion V. Applications

Étape 0:Calculer P le plus grand décalage possible en utilisant

l’instruction suivante:

Tant que P≤N faire

P3*P+1

Fin Tantque

Donc P vaut 13

Tri SHELL …Exemple

T= 13 10 20 5 11

  1 2 3 4 5

Page 26: Plan du chapitre I. Introduction II. Rappel III. Le tri Shell IV. Le tri par fusion V. Applications

Étape 1:

Tant que P>1 c’est-à-dire tant que le décalage possible on calcule P en utilisant la formule suivante:P(P-1)div 3

On obtient P=4

Donc on fait le décalage avec pas de 4

Tri SHELL …Exemple

T= 13 10 20 5 11

  1 2 3 4 5

Page 27: Plan du chapitre I. Introduction II. Rappel III. Le tri Shell IV. Le tri par fusion V. Applications

Étape 1…:Puisque P=4On fait le parcours du tableau de la case n°5 (P+1)

à la dernière case en utilisant la méthode de tri par insertion mais avec un décalage de pas de 4.

On obtient le tableau suivant:

Tri SHELL …Exemple

T= 11 10 20 5 13

  1 2 3 4 5

Page 28: Plan du chapitre I. Introduction II. Rappel III. Le tri Shell IV. Le tri par fusion V. Applications

Étape 2:Après que le décalage se termine et puisque P=4>1. on

recalcule de nouveau P et on trouve P= (P-1) div 3=1On fait le parcours du tableau de la case n°2 (P+1) à la

dernière case en utilisant la méthode de tri par insertion avec un décalage de pas de 1.

On obtient le tableau suivant:

Tri SHELL …Exemple

T= 5 10 11 13 20

  1 2 3 4 5

Page 29: Plan du chapitre I. Introduction II. Rappel III. Le tri Shell IV. Le tri par fusion V. Applications

Algorithme de la procédure Trier

0) Procedure Trier( n:integer;var T;tab)

1) P1

2) Tant que P≤n faire

PP*3+1

Fin Tantque

3) Tant que P>1 faire

PP Div 3

Pour j de P+1 à n faire

auxT[j]

kj

Tant que (k>P) et (T[K-P]>aux) faire

T[k]T[k-P]

Kk-P

Fin tant Que

T[k]aux

Fin Pour

Fin Tantque

4) Fin Trier

calcul du plus grand décalage

possible

tant que le décalage possible est non nul

valeur à décaler (éventuellement)

décalage des valeurs avec un pas de p

Insertion de l’élément à sa place