Adloun

OCaml (option informatique) · Chapitre 8 · Exercice de TD

Premier doublon

Piles, files et tables de hachage · niveau 2

Énoncé

Écrire premier_doublon l qui renvoie Some x où x est le premier élément de la liste l déjà rencontré auparavant, ou None si tous sont distincts.

Corrigé

let premier_doublon l =
  let vus = Hashtbl.create 16 in
  let rec parcours l =
    match l with
    | [] -> None
    | x :: reste ->
        if Hashtbl.mem vus x then Some x
        else begin
          Hashtbl.add vus x true;
          parcours reste
        end
  in
  parcours l

La table vus joue le rôle d'un ensemble : on y note chaque élément déjà vu (la valeur true importe peu, seule compte la présence de la clé). Dès qu'un élément est déjà présent, c'est le premier doublon. Coût en moyenne, contre avec une recherche par liste.

Exercices semblables

Le cours du chapitre · Tous les exercices du chapitre