Adloun

Chiffrer le gaspillage

Exercice · niveau 2 · informatique (MP2I/MPI), chapitre 17 — Programmation dynamique

Énoncé

Le chapitre affirme que fib 40 coûte « un milliard d'appels pour quarante valeurs distinctes ». Chiffrer exactement : combien la version récursive naïve fait-elle d'appels pour calculer fib n ? Et la version mémoïsée ?

Corrigé

Notons le nombre d'appels de la version naïve. Un appel se fait lui-même, puis lance et appels :

On vérifie par récurrence double que , où est la suite de Fibonacci : c'est vrai pour et , et .

Mesure (compteur incrémenté à chaque appel) :


n=10  fib=      55  appels naif=      177  appels memoise= 19
n=20  fib=    6765  appels naif=    21891  appels memoise= 39
n=30  fib=  832040  appels naif=  2692537  appels memoise= 59

On lit bien , et : le « milliard » du chapitre est un ordre de grandeur, la valeur exacte est trois cent trente et un millions.

Côté mémoïsation, la mesure donne : c'est . Pourquoi et non : chaque valeur entre et est calculée une fois, mais elle est demandée deux fois — une fois par , une fois par . Le second appel trouve la table garnie et rend immédiatement : il coûte , mais il compte comme appel. La complexité reste .

Ce que l'exercice montre : le chevauchement des sous-problèmes n'est pas une figure de style. Ici il fait passer de à , et le rapport vaut déjà pour .

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.