OCaml (option informatique) · Chapitre 10 · Exercice de TD
Première occurrence
Recherche et dichotomie · niveau 2
Énoncé
Sur un tableau trié avec doublons, écrire premiere_occ x t : l'indice de la première occurrence de x, ou None.
Corrigé
let premiere_occ x t =
let g = ref 0 and d = ref (Array.length t - 1) and res = ref None in
while !g <= !d do
let m = (!g + !d) / 2 in
if t.(m) = x then begin res := Some m; d := m - 1 end (* continuer à gauche *)
else if t.(m) < x then g := m + 1
else d := m - 1
done;
!res
Quand on trouve x, on le note mais on continue à chercher plus à gauche (d := m - 1) : la dernière trouvaille avant épuisement est la plus à gauche. C'est une dichotomie qui ne s'arrête pas à la première égalité.
Exercices semblables
- Dichotomie récursive corrigé
- Logarithme contre linéaire corrigé
- Point d'insertion corrigé
- Racine carrée entière par dichotomie corrigé
- Recherche d'un seuil monotone corrigé