OCaml (option informatique) · Chapitre 10 · Exercice de TD
Dichotomie récursive
Recherche et dichotomie · niveau 2
Énoncé
Écrire dicho_rec x t g d (version récursive) et donner son variant.
Corrigé
let rec dicho_rec x t g d =
if g > d then None
else
let m = (g + d) / 2 in
if t.(m) = x then Some m
else if t.(m) < x then dicho_rec x t (m + 1) d
else dicho_rec x t g (m - 1)
Variant : d - g (la largeur de l'intervalle), qui décroît strictement à chaque appel car g <= m <= d : le nouvel intervalle, [m+1, d] ou [g, m-1], est de largeur au plus d - g - 1. Le cas de base g > d (intervalle vide) renvoie None.
Exercices semblables
- Logarithme contre linéaire corrigé
- Première occurrence corrigé
- Point d'insertion corrigé
- Racine carrée entière par dichotomie corrigé
- Recherche d'un seuil monotone corrigé