Se você pudesse renomear a programação dinâmica, como chamaria?
Se você pudesse renomear a programação dinâmica, como chamaria?
Respostas:
A autobiografia de Richard Bellman sugere que ele escolheu o termo “programação dinâmica” para ser uma distração intencional.
Os anos 50 não foram bons anos para a pesquisa matemática. Tínhamos um cavalheiro muito interessante em Washington chamado Wilson. Ele era secretário de Defesa e, na verdade, tinha um medo e ódio patológico da palavra "pesquisa". Não estou usando o termo de ânimo leve; Estou usando com precisão. Seu rosto seria difuso, ele ficaria vermelho e ficaria violento se as pessoas usassem o termo "pesquisa" em sua presença. Você pode imaginar como ele se sentiu, então, sobre o termo "matemático". A RAND Corporation era empregada pela Força Aérea, e a Força Aérea tinha Wilson como chefe, essencialmente. Por isso, senti que tinha que fazer algo para proteger Wilson e a Força Aérea do fato de que estava realmente fazendo matemática dentro da RAND Corporation.
Qual título, qual nome, eu poderia escolher? Em primeiro lugar, eu estava interessado em planejar, em tomar decisões, em pensar. Mas planejar, não é uma boa palavra por várias razões. Decidi, portanto, usar a palavra 'programação'. Eu queria passar a ideia de que isso era dinâmico, multiestágio, variava no tempo - pensei: vamos matar dois coelhos com uma cajadada só. Vamos usar uma palavra que tenha um significado absolutamente preciso, ou seja, 'dinâmico', no sentido físico clássico. Também possui uma propriedade muito interessante como adjetivo, e é impossível usar a palavra "dinâmico" em um sentido pejorativo. Tente pensar em alguma combinação que possivelmente lhe dê um significado pejorativo. É impossível. Assim, pensei que “programação dinâmica” era um bom nome. Era algo que nem mesmo um congressista poderia se opor.
(Como Russell e Norvig apontam em seu livro de IA, no entanto, essa história deve ser um embelezamento criativo da verdade. Bellman usou a frase "programação dinâmica" em 1952 e Charles Erwin Wilson não se tornou secretário de Defesa até 1953. )
De qualquer forma, a motivação original de Bellman sugere planejamento em vários estágios , mas pelo menos para fins algorítmicos, prefiro algo como recursão frugal de baixo para cima , apenas com menos sílabas.
Existem dois aspectos importantes do DP: (1) definir os subproblemas (ou seja, configurar uma "tabela", que pode ser uma matriz multidimensional indexada talvez por números inteiros, vértices, subconjuntos de vértices etc.) e (2) resolver recursivamente subproblemas. Proponho "recursão tabular / tabulada" como um nome que se refere a ambos os aspectos.
Memoização é uma variante bastante comum.
Após minha recente palestra sobre programação dinâmica em design de algoritmos, pedi aos alunos que sugerissem um novo nome para esta técnica. Enquanto eu me divertia com "Programação difícil", queria algo que pudesse tornar a técnica mais memorável. Após a discussão aqui, proponho dois nomes, um para cima e para baixo e outro para baixo:
Multiway-Divide e Memoized-Conquer (também conhecido como Divide ^ M & Conquer ^ M) e
Mesclar todos os subproblemas (também conhecido como Merge_all)
Este documento ( paywalled doi ) chama problemas que podem ser atacados usando o DP "decompostos".
Discuti isso recentemente com alguns colegas e, após uma discussão acalorada, criamos o cache de chamadas tabulares .
Eu sugeriria o nome de Programação Indutiva - como uma espécie de ponte, desde nossos tempos até os bons tempos de Euler, Kepler et al. Ou talvez até Programação Indutiva Reversa . E sim, para mim, o DP está fortemente associado à indução, no antigo bom senso da noção. Memorização, cache, tabelas etc. são apenas elementos da técnica, não o núcleo da abordagem para quebrar as coisas.
Provavelmente algo que inclui as palavras tabela e preenchimento , pois é isso que acontece.
Vista recursiva ou horizonte recursivo