Se potessi rinominare la programmazione dinamica, come la chiameresti?
Se potessi rinominare la programmazione dinamica, come la chiameresti?
Risposte:
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.
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.
La memorizzazione è una variante abbastanza comune.
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)
Questo documento ( paywalled doi ) definisce i problemi che possono essere attaccati usando DP "decomposibili".
Ne ho discusso di recente con alcuni colleghi e dopo una discussione accesa abbiamo escogitato una cache tabulare delle chiamate .
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.
Probabilmente qualcosa che include le parole table e fill , poiché questo è ciò che accade.
Vista ricorsiva o orizzonte ricorsivo