C'è una differenza tra la programmazione dinamica top-down e bottom-up?


33

Esiste una differenza fondamentale tra la programmazione dinamica top-down e bottom-up?

In particolare, esiste un problema che può essere risolto dal basso verso l'alto ma non dall'alto verso il basso? Oppure l'approccio bottom-up è solo una svolta della ricorrenza nell'approccio top-down?

Risposte:


27

Per utilizzare il metodo bottom-up devi essere in grado di determinare in modo efficiente qual è il "bottom", che di solito significa che hai bisogno di uno spazio problematico fortemente limitato. Se sai quali saranno i calcoli del livello più basso e l'ordine di dipendenza che sale, ha senso eseguirli iterativamente nell'ordine corretto e archiviare quei risultati. I fattoriali, l'ingenua Fibonacci e la relazione di ricorrenza di Eulero per le partizioni sono tutti buoni esempi di problemi adatti a questo approccio.

Alcuni problemi non hanno un ordine di fondo o di dipendenza facilmente determinabile per i calcoli. Le valutazioni delle posizioni degli scacchi, ad esempio, vengono utilmente memorizzate per posizione, con il punteggio di valutazione memorizzato, quindi non è necessario ricalcolarlo. Le posizioni possono ripresentarsi a più livelli dell'albero di ricerca a causa del trasferimento di trasposizione e ripetizione, quindi vale la pena salvare i risultati della valutazione. Ma non c'è modo di sapere quali saranno le posizioni ai livelli più bassi dell'albero senza scendere ricorsivamente (e tenendo conto della potatura intermedia), quindi dall'alto in basso è davvero l'unico approccio possibile.


4
  • Approccio top-down: questo è il fall-out diretto della formulazione ricorsiva di qualsiasi problema. Se la soluzione a qualsiasi problema può essere formulata in modo ricorsivo usando la soluzione ai suoi sotto-problemi, e se i suoi sotto-problemi si sovrappongono, allora si può facilmente memorizzare o memorizzare le soluzioni ai sotto-problemi in una tabella. Ogni volta che tentiamo di risolvere un nuovo sotto-problema, controlliamo prima la tabella per vedere se è già stato risolto. Se una soluzione è stata registrata, possiamo usarla direttamente, altrimenti risolviamo il sotto-problema e aggiungiamo la sua soluzione alla tabella.

  • Approccio dal basso: una volta formulata la soluzione a un problema in modo ricorsivo come in termini di sotto-problemi, possiamo provare a riformulare il problema dal basso verso l'alto: prova prima a risolvere i sotto-problemi e usa le loro soluzioni per costruire- e arriva a soluzioni a problemi secondari maggiori. Questo di solito viene anche fatto in forma tabellare generando in modo iterativo soluzioni a sotto-problemi sempre più grandi usando soluzioni a piccoli sotto-problemi. Ad esempio, se conosciamo già i valori di F41 e F40, possiamo calcolare direttamente il valore di F42.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.