Come primo (classico) esempio, utilizziamo la serie di Fibonacci
,
che è definita, per un numero naturale
, nel seguente modo
. Purtroppo si può dimostrare che la
funzione richiamata due volte (#(1)), non fa calcoli indipendenti,
e infatti si ottiene un tempo di esecuzione esponenziale.
Per esempio per calcolare
, abbiamo bisogno di calcolare
più volte la stessa funzione
Per evitare di ricalcolare più volte la medesima funzione, si
può utilizzare la programmazione dinamica. In questo caso,
bisogna tabulare le soluzioni parziali, ed utilizzarle quando
se ne ha la necessità. Nel nostro caso bisogna introdurre
un vettore f[] con un numero di elementi pari
(in quanto abbiamo anche lo 0), che mantenga i risultati parziali.
L'algoritmo risultante è dato in Figura
.
Possiamo a questo punto valutare il numero di chiamate che i
due differenti algoritmi operano al variare del numero
.
In Tabella
si mostra come nel caso
dell'utilizzo della DP il numero di chiamate (il che implica
il tempo impiegato) sia lineare e non esponenziale come
avviene per la funzione semplice fibo1.
Questo primo esempio mostra quindi che se la soluzione del problema generale si può scomporre nella composizione di problemi parziali non indipendenti, si ha bisogno della tabulazione dei risultati parziali per poter ridurre il tempo di esecuzione.
| Numero |
Numero di chiamate | Numero di chiamate |
| da calcolare | di fibo1 | di fibo2 |
| 5 | 15 | 12 |
| 10 | 177 | 22 |
| 20 | 21891 | 42 |
| 30 | 2692537 | 62 |