Adloun

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

Mémoïsation de Fibonacci

Piles, files et tables de hachage · niveau 3 (difficile)

Énoncé

À l'aide d'une table, écrire fibo en qui mémorise les valeurs déjà calculées.

Corrigé

let memo = Hashtbl.create 100

let rec fibo n =
  if n < 2 then n
  else
    match Hashtbl.find_opt memo n with
    | Some v -> v
    | None ->
        let v = fibo (n - 1) + fibo (n - 2) in
        Hashtbl.add memo n v;
        v

Avant de calculer fibo n, on regarde s'il est déjà en cache. Sinon on le calcule une fois et on l'enregistre. Chaque valeur n'est ainsi calculée qu'une fois : on passe du coût exponentiel de la version naïve (chapitre 3) à un coût linéaire. C'est la mémoïsation — la programmation dynamique appliquée par cache.

Exercices semblables

Le cours du chapitre · Tous les exercices du chapitre