Se potessi rinominare la programmazione dinamica ...


43

Se potessi rinominare la programmazione dinamica, come la chiameresti?


1
Direi che la programmazione dinamica è programmazione dinamica. Questo è un concetto separato dagli algoritmi. Se chiedessi "applicazioni algoritmiche di programmazione dinamica", ciò avrebbe più senso per me.
Yoshio Okamoto,

1
Naturalmente dp è dp, ma programmazione e dinamica significano entrambe qualcosa di diverso oggi, quindi quando insegno programmazione dinamica, vorrei che avesse un nome diverso.
Jack

4
Scusa, non ero abbastanza chiaro. Sei interessato alla programmazione dinamica in generale, compreso l'uso nel controllo e nella pianificazione delle politiche, ecc., E persino nella programmazione dinamica stocastica, o semplicemente nella programmazione dinamica come metodo per la progettazione di algoritmi? Il pubblico principale qui dovrebbe conoscere solo il secondo, ma la tua domanda è abbastanza generale che includerebbe il primo.
Yoshio Okamoto,

1
Yoshio, penso che dovresti semplicemente spiegare il concetto più generale rispetto alle differenze in una risposta in quanto potrebbe illuminare molti di noi.
Raffaello

2
Un'altra idea non del tutto sfacciata: "la cosa che ti dà lavoro in Google" - basata sull'esperienza che i miei studenti hanno avuto :)
Suresh Venkat

Risposte:


50

L'autobiografia di Richard Bellman suggerisce che scelse il termine "programmazione dinamica" per distrarre intenzionalmente.

Gli anni '50 non furono anni buoni per la ricerca matematica. Abbiamo avuto un signore molto interessante a Washington di nome Wilson. Era segretario alla Difesa, e in realtà aveva una paura patologica e l'odio per la parola "ricerca". Non sto usando il termine alla leggera; Lo sto usando esattamente. Il suo viso sarebbe soffocato, diventerebbe rosso e diventerebbe violento se le persone usassero il termine "ricerca" in sua presenza. Puoi immaginare come si sentiva, quindi, riguardo al termine "matematico". La RAND Corporation era impiegata dall'Aeronautica Militare, e l'Aeronautica militare aveva Wilson come capo, essenzialmente. Quindi, ho sentito che dovevo fare qualcosa per proteggere Wilson e l'Aeronautica dal fatto che stavo davvero facendo matematica all'interno della RAND Corporation.

Quale titolo, quale nome posso scegliere? In primo luogo ero interessato a pianificare, a prendere decisioni, a pensare. Ma pianificare, non è una buona parola per vari motivi. Ho quindi deciso di usare la parola "programmazione". Volevo far passare l'idea che fosse dinamica, che fosse multistadio, che fosse variabile nel tempo: pensavo, uccidiamo due uccelli con una fava. Prendiamo una parola che ha un significato assolutamente preciso, vale a dire "dinamico", nel senso fisico classico. Ha anche una proprietà molto interessante come aggettivo, ed è impossibile usare la parola "dinamica" in senso peggiorativo. Prova a pensare a una combinazione che potrebbe dargli un significato peggiorativo. È impossibile. Quindi, ho pensato che la "programmazione dinamica" fosse un buon nome. Era qualcosa a cui nemmeno un deputato poteva obiettare.

(Come Russell e Norvig sottolineano nel loro libro di testo sull'IA, tuttavia, questa storia deve essere un abbellimento creativo della verità. Bellman usò per la prima volta la frase "programmazione dinamica" nel 1952 e Charles Erwin Wilson non divenne segretario alla Difesa fino al 1953. )

Ad ogni modo, la motivazione originale di Bellman suggerisce una pianificazione multistadio , ma almeno per scopi algoritmici, preferirei qualcosa come la ricorsione frugale dal basso verso l'alto , solo con meno sillabe.


10
Naturalmente, ciò che mi piacerebbe davvero fare è rinominare "Bellman's Equation", o come lo chiamano gli informatici, "qualsiasi ricorrenza di sorta".
Jeffε

2
la tua risposta è stata utilizzata qui: biostar.stackexchange.com/questions/17954
Pierre,

28

Esistono due aspetti importanti di DP: (1) la definizione dei sottoproblemi (ovvero l'impostazione di una "tabella", che potrebbe essere una matrice multidimensionale indicizzata forse da numeri interi, vertici, sottoinsiemi di vertici ecc.) E (2) risolvere ricorsivamente il sottoproblemi. Propongo "ricorsione tabulare / tabellare" come un nome che si riferisce a entrambi gli aspetti.


6
la ricorsione tabulare ha una bella sensazione.
Suresh Venkat,

21

La memorizzazione è una variante abbastanza comune.


8
La memorizzazione viene utilizzata, ma non caratterizza dp.
Jack

20
Esattamente. La memorizzazione è una programmazione dinamica per caso.
Jeffε

@professor erickson - molto ben detto. Non riesco a smettere di ridere.
Akash Kumar,

7
Tuttavia, se potessimo scegliere un nuovo nome per DP, l'uso della memoization sarebbe abbastanza adatto. Ad esempio "la distanza di modifica può essere calcolata in poly-time usando la memoization".
Noam,

La programmazione dinamica è un caso speciale di memoizzazione, oltre a dirigere esplicitamente il flusso di controllo invece di seguire il naturale ordine di valutazione applicativa. È un peccato che di solito venga insegnato così com'è, poiché pone troppa enfasi sulla compilazione di una tabella, anziché sulla specifica ricorsiva. Si presenta magico.
Neil Toronto,

8

Per andare con divide-and-conquer , direi splice-and-combina.

Di solito uso entrambe le parole, unisco e combino mentre insegno / spiego DP; ma non usato splice-and-combina esplicitamente. A volte ho usato sovrapposizioni-divide-and-conquer per contrastare i due paradigmi.


6

Dopo la mia recente lezione sulla programmazione dinamica nella progettazione di algoritmi, avevo chiesto agli studenti di suggerire un nuovo nome per questa tecnica. Mentre ero divertito da "programmazione difficile", volevo qualcosa che potesse rendere la tecnica più memorabile. Dopo la discussione qui, posso proporre due nomi, uno per il top-down e uno per il bottom-up:
Multiway-Divide e Memoized-Conquer (aka Divide ^ M & Conquer ^ M), e
Unisci tutti i sottoproblemi (aka Merge_all)


1
Non penso che creare una forte associazione con il solito divide & conquistare (come in Mergesort) sia una buona idea. Qui, i sottoproblemi vengono risolti in modo indipendente e vengono uniti solo due risultati. In DP, i sottoproblemi controllati non sono indipendenti e tutte le combinazioni sono controllate. (entrambi in termini approssimativi). Pertanto penso che un nome dovrebbe evidenziare la differenza piuttosto che creare un senso di somiglianza.
Raffaello,

@Raphael, condivido la preoccupazione per i pericoli legati alla creazione di una forte associazione, ma non sono d'accordo con la tua affermazione delle differenze. In DP è fondamentale che i sottoproblemi siano "risolti in modo indipendente" anche se le soluzioni ai sottoproblemi sono condivise. Di solito indico che se un oracolo ti dicesse la divisione giusta, sarebbe divisione e conquista, ma dal momento che non parlo greco (a differenza del mio dottore di ricerca), devo provare tutte le possibili divisioni.
Jack

2
Sì, i sottoproblemi sono concettualmente indipendenti. Tuttavia, mi riferivo a loro usando gli stessi risultati parziali, come hai sottolineato. Ciò separa DP da D&C, poiché ad esempio è possibile parallelizzare quest'ultimo senza calcolare più volte i sottoproblemi (o comunicare i risultati) rispetto al primo. La tua analogia è buona, ma in questo caso non garantisce il nome poiché trovare le divisioni corrette è una parte essenziale del problema. Suppongo che potresti dire che DP è una generalizzazione di D&C basata su quel ragionamento, comunque.
Raffaello,

@Raphael, mi dispiace essere pedante, ma poiché questa è una domanda sull'insegnamento, voglio che la nozione di indipendenza del sottoproblema sia chiara, e dire semplicemente "concettualmente indipendente" non è preciso. Quando provi una divisione, i sottoproblemi che produci potrebbero non avere dipendenze. I tuoi altri commenti si concentrano sui passaggi degli algoritmi DP; Preferisco concentrarmi prima sulla definizione precisa del problema da risolvere. I miei esempi preferiti: triangolazione del peso minimo e decomposizione minima convessa di poligoni semplici ( cs.unc.edu/~snoeyink/demos/convdecomp/MWTDemo.html )
Jack

Va bene essere pendenti. Ma considera l'importanza didattica della scelta delle parole: dici agli studenti che i sottoproblemi sono indipendenti e poi dai loro un algoritmo che non separa il loro calcolo, ma di fatto si basa fortemente sul calcolo "interfogliato". Penso che possa essere molto confuso. Pertanto, devi davvero separare concettuale / matematico / ottimizzazione / ... e indipendenza computazionale ad un certo punto.
Raffaello,


2

Ne ho discusso di recente con alcuni colleghi e dopo una discussione accesa abbiamo escogitato una cache tabulare delle chiamate .


3
sembra qualcosa che fai in un call center in outsourcing;)
Suresh Venkat

2

Suggerirei il nome di Programmazione induttiva - come una sorta di smith di bridge dai nostri tempi ai vecchi bei tempi di Eulero, Keplero et al. O forse anche la programmazione induttiva inversa . E sì, per me la DP è fortemente associata all'induzione, nel vecchio senso del concetto. La memorizzazione, la memorizzazione nella cache, le tabelle ecc. Sono solo elementi della tecnica, non del nucleo dell'approccio al crack.


il mio problema principale con DP è il P. quindi non sono un fan di questa idea ..
Suresh Venkat,

1

Probabilmente qualcosa che include le parole table e fill , poiché questo è ciò che accade.


7
Bah. La programmazione dinamica non riguarda le tabelle ; si tratta di ricorsione intelligente.
Jeffε

3
Sento che è meglio separare due aspetti: "Estrarre una struttura ricorsiva dal problema e scrivere come una ricorrenza" (modellistica) e "Risolvere la ricorrenza ottenuta in modo bottom-up" (algoritmi). Sento che la programmazione dinamica (negli algoritmi) si riferisce a entrambi, e questo vale anche per la programmazione lineare, la programmazione a numeri interi, la programmazione semidefinita, ecc.
Yoshio Okamoto,

1
Le tabelle sono talvolta utilizzate. La programmazione dinamica su alberi (ad esempio: set massimo indipendente) normalmente non utilizza una tabella [= array] per memorizzare la ricorrenza; utilizza un albero, o in alcuni casi un albero di matrici, o una schiera di alberi, o in alcuni casi un prodotto cartesiano di alberi. Allo stesso modo per la programmazione dinamica su dags o la programmazione dinamica su decomposizioni ad albero per grafici di larghezza dell'albero limitata.
Jeffε,

1
JeffE, un nome per una tecnica quasi mai copre tutte le applicazioni. Prendi la "diagonalizzazione", per esempio; nelle applicazioni avanzate, non vi è alcuna diagonale da nessuna parte (o almeno non l'area di azione esclusiva). Ma non sono troppo innamorato del "riempimento della tavola", mentre penso che potrebbe essere un nome ragionevole per i principianti.
Raffaello,

3
I miei 2 centesimi su questo argomento. La programmazione dinamica ha due aspetti distinti per la progettazione di algoritmi. Il primo è capire la meccanica di dp come in: ricorsione intelligente più memoizzazione che porta ad un algoritmo più veloce. Il secondo aspetto è come riconoscere che un problema può ammettere una ricorsione intelligente e risolverlo. Entrambi sono importanti da insegnare. Per quest'ultimo, un caso comune è dividere e conquistare con un'interazione limitata e, a mio avviso, vale la pena evidenziarlo esplicitamente.
Chandra Chekuri,

1

Vista ricorsiva o orizzonte ricorsivo


Orizzonte pigro? Ritardi nel calcolo di molti risultati fino a quando non sono necessari. DP non deve essere ricorsivo.
Chad Brewbaker,

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.