Universit´e Paris 7 - Denis Diderot IF2 : Structures de donn´ees et Objets JAVA
L1 Sciences Ann´ee 2008-2009, 2`eme semestre
TD n◦3
Invariants et Algorithmes de Tri
L’objet de ce TD est de se familiariser avec les invariants de boucle et de manipuler diff´erents
algorithmes de tris et d’´etudier leur complexit´e. On se donne `a chaque fois un tableau d’entiers
et le probl`eme consiste `a modifier l’ordre des ´el´ements de telle sorte qu’ils soient tri´es apr`es
l’application de l’algorithme.
Exercice 1 Algorithme d’Euclide
Le but de l’exercice est d’´ecrire un programme qui calcule le pgcd ( plus grand commun diviseur)
de deux nombres entiers positifs ( non tous nuls) , `a l’aide de l’algorithme d’Euclide. Celui-ci
est bas´e sur la propri´et´e suivante : si aet b6= 0 sont deux entiers positifs , et si l’on note r1le
reste de la division euclidienne de apar b, alors pgcd(a, b) = pgcd(b, r1). L’id´ee de l’algorithme
est de recommencer la mˆeme op´eration sur le couple (b, r1) , ce qui donne un nouveau r2, on
poursuit avec le couple (r1, r2) et ainsi de suite , jusqu’`a tomber sur un reste rn+1 nul. On a
alors pgcd(a, b) = pgcd(b, r1) = pgcd(r1, r2) = · · · =pgcd(rn,0) ; or on voit imm´ediatement que
pgcd(rn,0) = rn.
1. Pourquoi est-ce que ce calcul termine ?
2. ´
Ecrivez la m´ethode pgcd bas´ee sur cet algorithme .
3. ´
Exhibez un invariant pour la boucle while permettant de justifier la correction du pro-
gramme.
Exercice 2 Recherche dichotomique
Le but est d’´ecrire une fonction de recheche d’une valeur dans un tableau d’entiers.
1. ´
Ecrire une m´ethode recherche() qui prend un tableau d ’entiers tab et une valeur enti`ere
xet qui retourne un indice itel que tab[i]=x , sinon la m´ethode retourne -1.
2. Dans le cas o`u le tableau est tri´e par ordre croissant , il est possible de retrouver plus
rapidement la valeur recherch´ee xpar dichotomie. Le principe est de comparer `a xla
valeur stock´ee au milieu du tableau : si elle est plus grande que x, il faut chercher dans
la moiti´e inf´erieur du tableau, et sinon dans la moiti´e sup´erieure. On recommence alors
sur la portion du tableau de taille moiti´e et ainsi de suite jusqu’`a trouver la valeur. ´
Ecrire
la m´ethode rechercheDichotomie() bas´ee sur cette approche. Identifier un invariant et
comparer la complexit´e de deux algorithmes.
Exercice 3 Tri par D´enombrement
Une m´ethode de tri applicable `a une situation particuli`ere : le tri par d´enombrement. Il s’agit
de trier une suite de nnombres entiers dont les valeurs sont comprises entre 0 et k.
Si kn’est pas tr`es grand on peut utiliser l’algorithme suivant :
1