Tesi Robotica Un coprocessore per Stereo-Matching: Profiling ... | Page 41

i i “MF_Tesi” — 2011/9/12 — 11:39 — page 41 — #41 i Capitolo i 3 Programmazione Dinamica 3.1 Introduzione La programmazione dinamica, così come l’approccio ricorsivo divide-et-impera, è utilizzato per risolvere problemi combinando le soluzioni di sotto-problemi. In generale gli algoritmi basati su divide-et-impera partizionano il problema in sotto-problemi indipendenti, risolvono ricorsivamente i sotto-problemi, ed infine combinano le soluzioni per risolvere il problema di partenza. La programmazione dinamica, invece è applicabile quando i sotto-problemi non sono indipendenti, cioè quando i sotto-problemi condividono dei “sotto sotto-problemi”. In situazioni come questa, un algoritmo divide-et-impera esegue più lavoro del necessario, in quanto risolve più di una volta lo stesso sotto-problema comune. Un algoritmo di programmazione dinamica risolve ogni sotto sotto-problema una sola volta, dopo di ché il risultato viene memorizzato in una tabella, in modo da evitare di rielaborare nuovamente la risposta ad un sotto sotto-problema già incontrato. La programmazione dinamica di solito si applica ai problemi di ottimizzazione. In questa categoria di problemi ci sono molte possibili soluzioni. Ogni soluzione ha un valore, e noi desideriamo la soluzione con il valore ottimale (il massimo o il minimo, dipende dal problema). Tale soluzione è detta una soluzione ottima 41 i i i i