Adloun

Mémoïsation de Fibonacci

Exercice · OCaml (option informatique), chapitre 8 — Piles, files et tables de hachage

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

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.