NSI (première) · Chapitre 8 · Exercice de TD
Dérouler dichotomie sur 1, 3, 5, 7, 9, 11 en cherchant, puis
Dichotomie, voisins et gloutons · La recherche dichotomique · niveau 2
Énoncé
Dérouler dichotomie sur [1, 3, 5, 7, 9, 11] en cherchant , puis . Noter à chaque tour gauche, droite, milieu et la valeur du variant. Vérifier que le variant décroît strictement.
Corrigé
Les deux traces. Le variant est , le nombre d'indices encore candidats.
| tour | gauche | droite | milieu | ||
|---|---|---|---|---|---|
| 1 | 0 | 5 | 2 () | 6 | |
| 2 | 3 | 5 | 4 () | 3 | |
| 1 | 0 | 5 | 2 () | 6 | |
| 2 | 0 | 1 | 0 () | 2 | |
| 3 | 1 | 1 | 1 () | 1 |
Pour : la fonction renvoie au deuxième tour. Pour : après le troisième tour, , la boucle s'arrête et la fonction renvoie .
Le variant décroît bien strictement : puis . Il ne décroît pas régulièrement de moitié — de à , puis de à : la division entière fait que la coupe n'est pas toujours équilibrée. Ce que la démonstration exige, ce n'est pas « est divisé par deux » mais « diminue d'au moins » ; c'est plus faible, et cela suffit à conclure.
La trace, obtenue par la machine. Plutôt que de recopier à la main, on instrumente la fonction :
def dichotomie_tracee(t, v):
"""Meme algorithme, mais qui renvoie AUSSI la trace des tours."""
gauche, droite = 0, len(t) - 1
trace = []
while gauche <= droite:
milieu = (gauche + droite) // 2
trace.append((gauche, droite, milieu, t[milieu], droite - gauche + 1))
if t[milieu] == v:
return milieu, trace
elif t[milieu] < v:
gauche = milieu + 1
else:
droite = milieu - 1
return -1, trace
t = [1, 3, 5, 7, 9, 11]
assert dichotomie_tracee(t, 9) == (4, [(0, 5, 2, 5, 6), (3, 5, 4, 9, 3)])
r, tr = dichotomie_tracee(t, 4)
assert r == -1
variants = [x[4] for x in tr]
assert variants == [6, 2, 1]
assert all(variants[i] > variants[i + 1] for i in range(len(variants) - 1))
Le dernier assert est la propriété du variant, écrite en Python : une suite strictement décroissante. C'est le seul du lot qui resterait pertinent si l'on changeait le tableau.
100 % gratuit
Essaie le suivant avec le tuteur
- L'exercice suivant avec le tuteur, sans compte : il guide pas à pas, sans donner la réponse
- 16 autres exercices corrigés dans ce chapitre, et 20 à chercher avec le tuteur
- Le podcast et la vidéo du chapitre et la correction filmée du TD : 2 minutes sans compte
Sans compte : le cours, 2 minutes de podcast et de vidéo et un exercice avec le tuteur. Pour tout le reste : inscription gratuite en 30 secondes, sans carte bancaire.