¿Qué es "dinámico" acerca de la programación dinámica?

9

Uno de mis mayores tuvo una entrevista de trabajo y le preguntaron por qué se llama dinámico. No pudo responder y, después de darse por vencido, el entrevistador dijo que no había nada dinámico al respecto, simplemente se llama así. Eso me cuesta creerlo.

¿Se refiere al hecho de que los subproblemas se resuelven durante el tiempo de ejecución y se utilizan para alcanzar el objetivo final? ¿Te gusta la asignación dinámica de memoria que ocurre durante el tiempo de ejecución?

[RESPONDER]

Debería haber leído este artículo wiki antes de hacer la pregunta, lo siento.

kintoki
fuente
2
Respuesta corta, es solo un nombre. No necesita tener un significado literal.
Yuval Filmus
44
Podría decirse que las implementaciones típicas de DP (relleno de tabla) son tan estáticas como un algoritmo puede obtener.
Raphael

Respuestas:

1

Siempre intuí que significaba que los algoritmos que usaban programación dinámica parecían editar el espacio del problema " dinámicamente " hasta que el problema pudiera resolverse con un algoritmo codicioso.

Por ejemplo, con el problema del tablero de ajedrez , el algoritmo de programación dinámica edita todo el tablero a medida que lo atraviesa, y finalmente, se puede usar un algoritmo codicioso (de manera similar, con el algoritmo de ruta más corta de Dijkstra, etc.).

Sin embargo, no estoy seguro de si esto se generaliza a todos los problemas de programación dinámica.

Ensalada Realz
fuente
9

En realidad, no hay nada especial en el nombre "programación dinámica"; La técnica en sí misma se trata de una recursión de desenrollado inteligente. Vea esta pregunta y mire la respuesta de @Jeffe, en la que se informa que Belman elige ese nombre para distraer intencionalmente.

Massimo Cafaro
fuente
3
Si bien esto puede responder teóricamente a la pregunta, sería preferible incluir aquí las partes esenciales de la respuesta y proporcionar el enlace para referencia.
John Dvorak
Alguien en Wikipedia parece estar en desacuerdo, acabo de encontrar esto: es dinámico porque los valores de la tabla se completan con el algoritmo basado en otros valores de la tabla, y está programando en el sentido de establecer cosas en una tabla, como cómo la televisión la programación se refiere a cuándo transmitir lo que muestra - en Wikilibros
kintoki
@akki: hay ejemplos de programación dinámica en la que no se necesita una tabla ...
Massimo Cafaro
1
@akki: como ejemplo, calcular los números de Fibonacci de manera ascendente solo requiere un espacio constante para guardar los números de Fibonacci necesarios para calcular el siguiente de la serie; el cálculo de la común más larga subsecuencia de dos cadenas de longitud y se puede hacer usando espacio en lugar de la plena mesa y así sucesivamente. m n O ( m i n ( m , n ) ) m nO(1)mnO(min(m,n))mn
Massimo Cafaro
2
@akki: ¡eso es exactamente a lo que me refiero cuando digo que DP se trata de desenrollar inteligentemente la recursión! Pero el nombre en sí no tenía sentido y sigue sin tener sentido.
Massimo Cafaro
6

Hay una historia interesante aquí ... Bellman fue pionero en este paradigma. Pero, esto fue en realidad una investigación matemática. En su día, el entonces secretario de defensa estaba paranoico de las palabras Investigación y Matemáticas (¡loco, cierto!). Bellman tenía miedo de que el secretario se enfureciera con su trabajo y eventualmente lo metiera en problemas. Entonces, para desdibujar un poco las cosas, lo llamó Programación dinámica , sin embargo, no tiene nada de "dinámico".

Subhayan
fuente
1
¿Fuente para esto? Parece una historia realmente interesante.
jmite
Solo como una nota al margen: no parece claro quién ideó la programación dinámica por primera vez. Se debe acreditar a Bellman por probar que cualquier implementación de programación dinámica cuando sea óptima obedece a las llamadas ecuaciones de Bellman-Ford. Desafortunadamente, parece que muchas personas creen fácilmente que eso hace que Bellman sea el investigador principal detrás de la idea original.
Carlos Linares López
@jmite, leí esto en algún lugar (probablemente algún blog) ... intentaré proporcionar la fuente ...
Subhayan
@jmite Puede encontrar la historia en la nota de lectura de Jeff de la Conferencia 5: Programación dinámica y también en el wiki: programación dinámica .
hengxin
3

Richard Bellman lo llamó programación dinámica en las palabras en Bellman ingrese la descripción de la imagen aquí

Pasé el trimestre de otoño (de 1950) en RAND. Mi primera tarea fue encontrar un nombre para los procesos de decisión en varias etapas.

Una pregunta interesante es: ¿De dónde viene el nombre, programación dinámica? La década de 1950 no fueron buenos años para la investigación matemática. Tuvimos un caballero muy interesante en Washington llamado Wilson. Fue Secretario de Defensa, y en realidad tenía un miedo patológico y odio a la palabra investigación. No estoy usando el término a la ligera; Lo estoy usando con precisión. Su rostro se ensuciaría, se volvería rojo y se volvería violento si la gente usara el término investigación en su presencia. Puedes imaginar cómo se sintió, entonces, sobre el término matemático. La Corporación RAND fue empleada por la Fuerza Aérea, y la Fuerza Aérea tenía a Wilson como su jefe, esencialmente. Por lo tanto, sentí que tenía que hacer algo para proteger a Wilson y a la Fuerza Aérea del hecho de que realmente estaba haciendo matemáticas dentro de la Corporación RAND. Qué título, qué nombre podría elegir? En primer lugar, me interesaba planificar, tomar decisiones y pensar. Pero planificar no es una buena palabra por varias razones. Por lo tanto, decidí usar la palabra "programación". Quería transmitir la idea de que esto era dinámico, que era de varias etapas, que variaba en el tiempo. Pensé, matemos dos pájaros de un tiro. Tomemos una palabra que tenga un significado absolutamente preciso, a saber, dinámico, en el sentido físico clásico. También tiene una propiedad muy interesante como adjetivo, y es imposible usar la palabra dinámica en un sentido peyorativo. Intenta pensar en alguna combinación que posiblemente le dé un significado peyorativo. Es imposible. Por lo tanto, pensé que la programación dinámica era un buen nombre. Era algo a lo que ni siquiera un congresista podría oponerse.

Fuente: Ojo del huracán, Richard Bellman (Autobiografía)

Anuj Gupta
fuente