
2.1 Recherche séquentielle et recherche dichotomique
f. Ecrivez une fonction rechSequentielle (cf. cours) qui prend en argument un tableau d’en-
tier tab trié et un nombre entier positif n. Cette fonction renvoie la position de ns’il est trouvé
dans le tableau et renvoie -1 sinon.
g. Ecrivez maintenant une fonction rechDichotomique (cf. cours) qui prend les mêmes ar-
guments que la fonction précédente et renvoie la même valeur, mais qui se base sur l’idée de
dichotomie (diviser pour régner) pour effectuer la recherche.
h. Quelle est la complexité de ces deux fonctions?
i. Écrivez une méthode main permettant de tester vos fonctions. Cette méthode, doit créer un
tableau de 1 000 000 de nombres entiers dont chaque case tab[i] sera initalisée avec la valeur
i + i/2, ce qui permet d’obtenir un tableau trié. Vous lancerez la recherche d’un nombre ap-
partenant au tableau (par exemple 1 125000) et d’un nombre n’appartenant pas au tableau (par
exemple 1 125 002) afin de vérifier la correction de vos deux fonctions.
2.2 Temps d’exécution
j. Afin de comparer les temps d’exécution des deux fonctions, implantez la classe Time dont le
code vous est fournit ci-dessous. Cette classe possède un constructeur qui créé un objet conte-
nant la date actuelle et une fonction d’instance millisecondsFrom qui renvoie le nombre de
millisecondes séparant deux objets de type Time. Elle va nous permettre de mesurer les temps
d’exécution des recherches.
1class Time
2{
3private java.util.Date date;
4
5Time()
6{
7date = new java.util.Date();
8}
9
10 long millisecondsFrom(Time t2)
11 {
12 return (date.getTime() - t2.date.getTime());
13 }
14 }
k. Les ordinateurs que nous utilisons étant très rapides, vous créerez deux boucles for réalisant
chacune 1 000 itérations. Dans la première, vous lancerez la recherche séquentielle d’une valeur,
et dans la seconde, vous lancerez la recherche dichotomique de la même valeur (afin que les tests
soient équitables).
Afin de mesurer le temps d’exécution de chaque boucle, vous créerez un objet de type Time
avant et après la boucle, et vous mesurerez le nombre de millisecondes qui les sépare en appelant
la fonction millisecondsFrom.
l. Comparez les temps d’exécution des 1 000 recherches séquentielles et dichotomiques.
2.3 Nombre d’opérations réalisées
m. De la même manière que pour le premier exercice, rajoutez un compteur permettant d’éva-
luer le nombre de comparaisons effectuées par chaque méthode.
3