Adloun

Première occurrence

Exercice · OCaml (option informatique), chapitre 10 — Recherche et dichotomie

É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é.

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.