ALGORITHMES DICHOTOMIQUES(1) TP
Algorithmes dichotomiques (1) – TP
10Les deux questions (Pour aller plus loin) sont à faire en DNS pour le mardi 04 janvier 2022.
Recherche dans une liste
Étant donnés une listeL et une valeurx, on veut écrire une fonction qui, si xest dans la liste, renvoie le booléenTrueet, sinon, renvoie le booléenFalse.
Recherche linéaire
Une première méthode consiste à parcourir la liste L du premier au dernier élément, jusqu’à éventuellement rencontrer la valeurx.
1. Écrire une fonctionrechercheLineaire(L,x)qui utilise la méthode naïve. Elle prend en paramètre une listeL et une valeur x.
2. Compter le nombre maximal de comparaisons effectuées par la fonctionrechercheLineaire(L,x).
3. (Pour aller plus loin) Modifier votre fonction pour qu’elle renvoie le premier indice oùxapparaît dansL, si xest bien dans la liste, et renvoie−1 sinon.
Recherche dichotomique
Dans cette partie, on considère unelisteLtriée dans l’ordre croissant de nombres réels. On cherche alors à déterminer si un élémentxest dans la listeL, de longueurn, par une autre méthode, larecherche dichotomique.
La recherche dichotomique repose sur le principe suivant :
a. On considère l’élémentyd’indicen//2 (celui qui se trouve « au milieu » de la liste).
b. On compare l’élémentyà la valeur dex:
• Si l’élément yest égal àx, la valeur recherchée est dans la liste ;
• Si xest strictement inférieur à l’élément y, on cherche xparmi les éléments d’indice 0 àn//2 exclu.
• Si xest strictement supérieur à l’élémenty, on cherchexparmi les éléments d’indicen//2 exclu ànexclu.
c. On recommence les étapes a. et b. jusqu’à ou bien trouver la valeur x, ou bien ne plus avoir d’élément à comparer.
Pour mettre en place ce principe, on propose l’algorithme suivant à compléter.
Algorithme 1 :Recherche dans une liste triée
Données :xun réel etLune liste de réels triée par ordre croissant Sorties :Truesixest dansLetFalsesinon
Traitement :
1 g←0 ;
2 d←longueur deL−1 ;
3 tant que g<=dfaire
4 m←quotient dans la division euclidienne deg+dpar 2 ;
5 six=L[m]alors
Renvoyer :...
6 sinon si...alors
7 d←m−1;
8 sinon
9 g←m+1;
Renvoyer :...
G. BOUTARD 1 Lycée GAY-LUSSAC
TP ALGORITHMES DICHOTOMIQUES(1)
1. Compléter l’algorithme donné en pseudo code. Que représentegetd? 2. Sur feuille, appliquer l’algorithme avec
L=[0, 5, 8, 12, 18, 22, 23, 30] et x=27
3. Implémenter l’algorithme en Python. On appellerarechercheDichotomie(L,x)la fonction.
4. Modifier la fonctionrechercheDichotomie(L,x)pour qu’à chaque itération elle affiche la sous liste des éléments d’indices compris entre getd.
5. (Pour aller plus loin) Modifier la fonctionrechercheDichotomie(L,x)pour qu’elle renvoie un indiceitel que L[i]=xsixest dans la liste et renvoie−1 sinon.
6. Dans cette question, on considère que la longueur de la liste estn=2p. Compter le nombre maximal de comparai- sons effectuées. Comparer avec la recherche linéaire. Conclure.
PCSI 2021 – 2022 2 G. BOUTARD