OCaml (option informatique) · Chapitre 10 · Exercice de TD
Racine carrée entière par dichotomie
Recherche et dichotomie · niveau 3 (difficile)
Énoncé
Écrire racine n (), le plus grand tel que , en par dichotomie (à comparer au du chapitre 4).
Corrigé
let racine n =
let g = ref 0 and d = ref n in
while !g < !d do
let m = (!g + !d + 1) / 2 in (* milieu « par excès » *)
if m * m <= n then g := m
else d := m - 1
done;
!g
On cherche le plus grand m avec m*m <= n. Invariant : !g * !g <= n (g est réalisable) et la réponse est dans [g, d]. Le milieu par excès (+1) est nécessaire : avec g := m et un milieu par défaut, on bouclerait sans fin quand d = g + 1. Variant : d - g. Coût . racine 10 .
Exercices semblables
- Logarithme contre linéaire corrigé
- Première occurrence corrigé
- Point d'insertion corrigé
- Recherche d'un seuil monotone corrigé
- Exponentiation modulaire rapide corrigé