tp_dichotomie
tp_dichotomie
tp_dichotomie
Algo: recherche_dichotomie
Données: x un nombre et t une liste triée
Résultat: vrai si x est un élément de t et faux sinon
n = longueur de t
a = 0 # indice de la borne gauche du tableau
©Arnaud de Saint Julien -Informatique- MPSI Lycée La Merci 2024-2025 2
4. Implémenter votre fonction en Python et tester là avec le tableau précédent et les valeurs
x = 25 et x = 24. Faîtes d’autres tests en prenant pour x des valeurs extrêmes comme
le premier ou le dernier élément du tableau, puis faire des tests avec des tableaux de
longueur 1 ou 2.
5. Si l’on admet que la quantité b − a est au moins divisée par 2 à chaque itération (est-ce
le cas de votre algorithme ?), combien faudra-t-il d’itérations au pire pour une liste de
longueur 2p ? Commenter.
Cette opération se fait dans un temps constant (en moyenne), donc ne dépend pas de la
taille du dictionnaire (c’est une conséquence des tables de hashage, notion hors-programme).
C’est un des intérêts fondamentaux du dictionnaire.
On se propose de vérifier expérimentalement ceci.
def temps_liste(taille_liste):
n = taille_liste
t = [0 for k in range(n)] # liste de zéros
delta = t1 -t0
print(f"temps de calcul en ms: {int(1000*delta)}")
for k in range(2,7):
temps_liste(10**k)
def temps_dico(taille_dico):
n = taille_dico
t = [0 for k in range(n)]
dico = liste_to_dico(t)
delta = t1 -t0
print(f"temps de calcul en microsecondes: {int(10**6*delta)}")
for k in range(2,7):
temps_dico(10**k)
Pour comprendre comment fonctionne un dictionnaire, on peut regarder les deux vidéos
suivantes sur Internet :
1. Écrire une fonction intersection(liste1: [int], liste2:[int]) -> [int] qui prend
en argument deux listes d’entiers deux à deux distincts et renvoie une liste qui contient
les éléments communs aux deux listes (l’ordre des éléments n’est pas important). Par
exemple si liste1 = [4, 10, 25, 13, 21, 3] et liste2 = [2, 3, 50, 10, 47], la
fonction pourrait renvoyer la liste [10, 3]. Dans cette question, on n’utilisera pas de
dictionnaires.
2. Déterminer la complexité de cette fonction. On pourra supposer que les deux listes ont
une même longueur n.
• les arguments de dichotomie devront être : la fonction f , des réels a et b, avec a < b et
un réel ε > 0 qui peut être égal à 10−10 par défaut.
Exercice 3 (Utilisation)
1. On considère la fonction f définir sur R par f (x) = x7 + 23x5 + 2x3 − 2. Prouver que f
admet une unique racine a dans [0, 1] puis déterminer une valeur approchée de a à 10−6
2. Déterminer une valeur approchée à 10−6 près des éventuelles racines de la fonction x 7→
2x3 − 9x2 + 12x − 92 .
3. Comment
√ utiliser la fonction dichotomie pour obtenir une valeur approchée du nombre
3
2 à 10 près ?
−4
4. Comment utiliser la fonction dichotomie pour obtenir une valeur approchée du nombre
π?
2. En déduire que l’algorithme se termine et que le nombre d’itérations p vérifie p 6 log2 (n)+
1. Comment qualifie-t-on cette complexité ?
3 Le juste prix
Exercice 5 (Le juste prix) Alice choisit un entier au hasard, par exemple entre 1 et n =
1000. Bob doit deviner le nombre choisi par Alice avec un minimum de réponses. Pour chaque
réponse de Bob, Alice lui indique si sa réponse est trop grande, trop petite ou correcte.
Bob pense pouvoir trouver le juste prix en moins de dix réponses. Qu’en pensez-vous ?