• Aucun résultat trouvé

TD1.2  Écriture et analyse d'algorithmes de tri

N/A
N/A
Protected

Academic year: 2022

Partager "TD1.2  Écriture et analyse d'algorithmes de tri"

Copied!
3
0
0

Texte intégral

(1)

TD1.2 Écriture et analyse d'algorithmes de tri

Objectifs

À la n de cette séance, vous devriez être capable de : illustrer le fonctionnement d'algorithmes par des schémas ;

écrire en langage algorithmique des algorithmes simples décrits en langue naturelle ; analyser le coût d'algorithmes dans des cas simples ;

Exercice 1 : Tri de Shell

On rappelle ci-dessous l'algorithme de tri par insertion (on suppose ici le tableau indexé de 1 à n).

Ce tri insère successivement chaque élément du tableau dans la séquence formée par les éléments d'indices inférieurs. Pour cela, on échange l'élément à placer avec celui qui le précède jusqu'à ce qu'il soit à sa place.

TRI_INSERTION(tableau T) fori:= 2to ndo

x:=T[i]

j :=i−1

while j >0 et puisT[j]> xdo T[j+ 1] :=T[j]

j :=j−1 T[j+ 1] :=x

On s'intéresse à une variante de ce tri proposée par Donald Shell en 1959 : celle-ci consiste à choisir un entier k et à appliquer dans une première passe l'algorithme du tri par insertion sur chacun desk sous-tableauxTi constitués des termes d'indices de la formei+j×k (pour j entier quelconque).

Autrement dit, le sous-tableauTi commence à l'indicei et contient des éléments séparés d'un pas dek positions.

Par exemple, pour un tableau de 12 éléments avec k= 5, le tableauT1 contient les termes d'indices 1,6,11;T2ceux d'indices2,7,12;T3ceux d'indices3,8; et ainsi de suite.

Une fois le tri par insertion réalisé sur tous les tableauxTi, on décrémente le pasket on recommence le processus, et ce jusqu'àk= 1.

1. Appliquer l'algorithme de tri de Shell sur le tableau T = [G;C;A;B;E;F;D]avec un pas initial k= 3. Donner le contenu du tableau T après chaque étape de tri sur chaque sous-tableauTi et pour toutes les valeurs dekde 3 à 1.

2. Représenter sous forme de schémas le déroulement du tri de Shell.

3. Écrire en détails l'algorithmetriShell(T, n, k)oùTest le tableau à trier,nest le nombre d'élément de ce tableau, etkla valeur initiale du pas.

4. Pourquoi le tri de Shell réussit-il forcément à trier le tableau donné en entrée ?

Que se passe-t-il si on ne prend plus comme valeurs de pask, k−1, k−2, . . . ,2,1 mais d'autres suites comme par exemple7,5,3,1ou encore8,4,2,1?

5. Déterminer la complexité du tri de Shell en nombre de comparaisons entre éléments du tableau : lorsque les pas sontk, k−1, k−2, . . . ,2,1

lorsque les pas sontn/2, n/4, . . . ,8,4,2,1 6. (à faire seulement si vous êtes en avance)

Comparer la complexité calculée avec celle du tri par insertion.

Expérimentalement, on constate pourtant que le tri de Shell est plus ecace (et on peut le prouver, dans certains cas).

Essayer le tri de Shell sur un tableau plus grand (15 à 20 éléments) et avec la suite de pas9,5,3,1. Que constate-t-on lors des deux dernières passes ?

L3 Info Algorithmique et analyse d'algorithmes 2021-2022 1/3

(2)

TD1.2 Écriture et analyse d'algorithmes de tri

Exercice 2 : Un programme . . .

Data : Un tableauT indicé de1à ndont les éléments sont compris entre1etn Result : à déterminer

S : un tableau d'entiers indicé de 1à n fori= 1. . . ndo

S[i] := 0 fori= 1. . . ndo

S[T[i]] :=S[T[i]] + 1 i:= 1

j := 1

while i≤netj ≤ndo k= 0

while k < S[j]do T[i] :=j i:=i+ 1 k:=k+ 1 j :=j+ 1

1. En vous aidant de schémas, déterminer ce que fait ce programme.

2. Quel est son coût en fonction den?

L3 Info Algorithmique et analyse d'algorithmes 2021-2022 2/3

(3)

TD1.2 Écriture et analyse d'algorithmes de tri

Membres du groupe

Exercice 1 : Écriture du tri de Shell

2. Représenter sous forme de schémas le déroulement du tri de Shell.

3. Écrire en détails l'algorithmetriShell(T, n, k)oùTest le tableau à trier,nest le nombre d'élément de ce tableau, etkla valeur initiale du pas.

L3 Info Algorithmique et analyse d'algorithmes 2021-2022 3/3

Références

Documents relatifs

En revanche l'absence complète de visualisation des valeurs dans les cellules ne montre pas comment le tableau se transforme ; il n'est pas non plus explicité que l'algorithme

C’est le tri pratiqué intuitivement pour classer un jeu de cartes : il consiste de ranger toutes les cartes, l’une après l’autre, dans l’ordre de la donne au bon endroit parmi

— si les entrées d’un comparateur sont des câbles de profondeur p 1 et p 2 alors la profondeur des deux câbles de sortie est 1 + max(p 1 , p 2 ). Question 8 – Quelle

L’archive ouverte pluridisciplinaire HAL, est destinée au dépôt et à la diffusion de documents scientifiques de niveau recherche, publiés ou non, émanant des

La dichotomie (couper en deux) est un processus de recherche où à chaque étape l’espace de recherche se réduit à l’une des parties. Pour exécuter ce processus il faut que

[r]

Question : Est-il possible de trier un tableau de n ´el´ements en moins de n · log( n ) op´erations dans le pire cas. Non si on n’utilise que des comparaisons 2 `a 2 et sans

Ecrire une fonction qui partitionne une sous partie des éléments d’un tableau (délimitée par les indices debut et f in) de telle sorte que toutes les valeurs de cette sous partie