Prouver qu'il suffit de sept coups
Exercice de TD · niveau 3 (difficile) · sciences numériques et technologie (seconde), chapitre 7 — Projets et mini-jeux · Le nombre mystère
Énoncé
La fonction deviner(secret) du cours cherche un entier de à par dichotomie.
- La faire tourner sur les valeurs possibles et relever le nombre maximal de coups, puis le nombre moyen.
- Démontrer la borne obtenue.
- Que devient cette borne si l'on cherche entre et ?
Corrigé
1.
def deviner(secret):
bas, haut = 1, 100
coups = 0
while bas <= haut:
milieu = (bas + haut) // 2
coups = coups + 1
if milieu < secret:
bas = milieu + 1
elif milieu > secret:
haut = milieu - 1
else:
return coups
mesures = [deviner(s) for s in range(1, 101)]
print(max(mesures), sum(mesures) / 100) # 7 5.8
Sept coups au pire, et en moyenne.
2. Démonstration. À chaque coup, le milieu est testé et éliminé, et il reste au plus la moitié des candidats (la plus grande des deux parts, à droite du milieu) : de on passe à au plus , puis , , , , . Après coups il reste au plus candidats ; après six coups il en reste au plus un, que le septième coup trouve. Comme , sept coups suffisent toujours, et six ne suffisent pas pour toutes les valeurs (le programme du 1. en trouve : max(mesures) vaut ).
3. Il faut le plus petit tel que , soit (car et ).
Ce que ce chiffre dit : multiplier l'espace de recherche par ne coûte que coups de plus. Une recherche séquentielle, elle, passerait de à un million d'essais. C'est le même gain que la dichotomie de la racine carrée vue au chapitre 4.
Les autres exercices de ce chapitre Le cours du chapitre
Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.