Si pudieras renombrar la programación dinámica ...

43

Si pudieras cambiar el nombre de la programación dinámica, ¿cómo lo llamarías?

Jack
fuente
1
Yo diría que la programación dinámica es programación dinámica. Ese es un concepto separado de los algoritmos. Si usted preguntara "aplicaciones algorítmicas de programación dinámica", eso tendría más sentido para mí.
Yoshio Okamoto
1
Por supuesto, dp es dp, pero la programación y la dinámica significan algo diferente hoy, así que cuando enseño programación dinámica, desearía que tuviera un nombre diferente.
Jack
44
Lo siento, no fui lo suficientemente claro. ¿Está interesado en la programación dinámica en general, incluido el uso en el control y la planificación de políticas, etc., e incluso en la programación dinámica estocástica, o simplemente en la programación dinámica como método para el diseño de algoritmos? La audiencia principal aquí solo conocería la última, pero su pregunta es bastante general e incluiría la primera.
Yoshio Okamoto
1
Yoshio, creo que deberías explicar el concepto más general y las diferencias en una respuesta, ya que podría iluminarnos a muchos.
Raphael
2
Otra idea que no es del todo descabellada: "lo que te da trabajo en Google", basada en la experiencia que han tenido mis alumnos :)
Suresh Venkat

Respuestas:

50

La autobiografía de Richard Bellman sugiere que eligió el término "programación dinámica" para distraer intencionalmente.

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. Era 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 que es imposible usar la palabra 'dinámico' en un sentido peyorativo. Intenta pensar en alguna combinación que posiblemente le dé un significado peyorativo. Es imposible. Por lo tanto, pensé que "programación dinámica" era un buen nombre. Era algo a lo que ni siquiera un congresista podría oponerse.

(Sin embargo, como Russell y Norvig señalan en su libro de texto de IA, esta historia debe ser un adorno creativo de la verdad. Bellman utilizó por primera vez la frase "programación dinámica" en 1952 , y Charles Erwin Wilson no se convirtió en Secretario de Defensa hasta 1953. )

De todos modos, la motivación original de Bellman sugiere una planificación de varias etapas , pero al menos para fines algorítmicos, preferiría algo como la recursión frugal de abajo hacia arriba , solo con menos sílabas.

Jeffε
fuente
10
Por supuesto, lo que realmente me gustaría hacer es cambiar el nombre de "Ecuación de Bellman", o como lo llaman los informáticos, "cualquier recurrencia".
Jeffε
2
su respuesta se utilizó aquí: biostar.stackexchange.com/questions/17954
Pierre
28

Hay dos aspectos importantes de DP: (1) definir los subproblemas (es decir, configurar una "tabla", que podría ser una matriz multidimensional indexada tal vez por enteros, vértices, subconjuntos de vértices, etc.) y (2) resolver recursivamente subproblemas Propongo "recursión tabular / tabulada" como un nombre que se refiere a ambos aspectos.

Daniel Marx
fuente
66
La recursividad tabular tiene una sensación agradable.
Suresh Venkat
21

La memorización es una variante bastante común.

Suresh Venkat
fuente
8
Se utiliza la memorización, pero no caracteriza a dp.
Jack
20
Exactamente. La memorización es programación dinámica por accidente.
Jeffε
@professor erickson - muy bien dicho. no puedo parar de reir.
Akash Kumar
77
Aún así, si pudiéramos elegir un nuevo nombre para DP, entonces usar la memorización sería bastante adecuado para ello. Por ejemplo, "la distancia de edición se puede calcular en tiempo polivinílico utilizando la memorización".
Noam
La programación dinámica es un caso especial de memorización, además de dirigir explícitamente el flujo de control en lugar de seguir el orden de evaluación aplicativo natural. Es una pena que generalmente se enseñe como es, ya que pone demasiado énfasis en llenar una tabla, en lugar de la especificación recursiva. Se ve como mágico.
Neil Toronto
8

Para ir con divide y vencerás , yo diría empalmar y combinar.

Usualmente uso ambas palabras, empalmar y combinar mientras enseño / explico DP; pero no se usa empalmar y combinar explícitamente. A veces he usado la superposición de dividir y conquistar para contrastar los dos paradigmas.

V Vinay
fuente
6

Después de mi reciente conferencia sobre programación dinámica en diseño de algoritmos, les pedí a los estudiantes que sugirieran un nuevo nombre para esta técnica. Aunque me divertía la "programación difícil", quería algo que pudiera hacer que la técnica fuera más memorable. Después de la discusión aquí, puedo proponer dos nombres, uno para arriba hacia abajo y otro para abajo:
Multiway-Divide y Memoized-Conquer (también conocido como Divide ^ M & Conquer ^ M), y
Merge all subproblems (también conocido como Merge_all)

Jack
fuente
1
No creo que sea una buena idea crear una asociación fuerte con la división y conquista habituales (como en Mergesort). Allí, los subproblemas se resuelven de forma independiente y solo se fusionan dos resultados. En DP, los subproblemas verificados no son independientes y se verifican todas las combinaciones. (ambos en términos generales). Por lo tanto, creo que un nombre debería resaltar la diferencia en lugar de crear una sensación de similitud.
Raphael
@Raphael, comparto la preocupación sobre los peligros de crear una asociación fuerte, pero no estoy de acuerdo con su declaración de las diferencias. En DP es crucial que los subproblemas se "resuelvan independientemente" aunque se compartan las soluciones a los subproblemas. Por lo general, señalo que si algún oráculo te dice la división correcta, sería dividir y conquistar, pero como no hablo griego (a diferencia de mi asesor de doctorado), tengo que probar todas las divisiones posibles.
Jack
2
Sí, los subproblemas son conceptualmente independientes. Sin embargo, me estaba relacionando con ellos usando los mismos resultados parciales, como usted señala. Esto separa DP de D&C, ya que es posible, por ejemplo, paralelizar este último sin calcular subproblemas varias veces (o comunicar los resultados) en oposición al primero. Su analogía es buena pero no garantiza el nombre en este caso, ya que encontrar las divisiones correctas es una parte esencial del problema. Sin embargo, supongo que se podría decir que DP es una generalización de D&C basada en ese razonamiento.
Raphael
@Raphael, lamento ser pedante, pero como esta es una pregunta sobre la enseñanza, quiero que la noción de independencia del subproblema sea clara, y decir "conceptualmente independiente" no es preciso. Cuando intenta una división, los subproblemas que produce pueden no tener dependencias. Sus otros comentarios se centran en los pasos de los algoritmos DP; Prefiero centrarme primero en definir con precisión el problema a resolver. Mis ejemplos favoritos: triangulación de peso mínimo y descomposición convexa mínima de polígonos simples ( cs.unc.edu/~snoeyink/demos/convdecomp/MWTDemo.html )
Jack
Está bien ser pendantic. Pero considere la importancia didáctica de la elección de las palabras: le dice a los estudiantes que los subproblemas son independientes y luego les da un algoritmo que no separa su cálculo, pero que de hecho depende en gran medida del cálculo "intercalado". Creo que eso puede ser muy confuso. Por lo tanto, realmente tiene que separar la conceptual / matemática / optimización / ... y la independencia computacional en algún momento.
Raphael
2

Discutí esto con algunos colegas recientemente, y después de una acalorada discusión surgió el almacenamiento en caché de llamadas tabulares .

Kevin Wortman
fuente
3
eso suena como algo que haces en un centro de llamadas subcontratado;)
Suresh Venkat
2

Sugeriría el nombre de Programación inductiva , como una especie de puente desde nuestros tiempos hasta los buenos tiempos de Euler, Kepler et al. O tal vez incluso la programación inductiva inversa . Y sí, para mí DP está fuertemente asociado con la inducción, en el viejo sentido de la noción. La memorización, el almacenamiento en caché, las tablas, etc. son solo elementos de la técnica, no del núcleo del enfoque para descifrar cosas.

trg787
fuente
mi principal problema con el DP es el P. así que no soy fanático de esta idea ..
Suresh Venkat
1

Probablemente sea algo que incluya las palabras tabla y relleno , ya que esto es lo que sucede.

Rafael
fuente
77
Bah. La programación dinámica no se trata de tablas ; Se trata de la recursión inteligente.
Jeffε
3
Creo que es mejor separar dos aspectos: "Extraer una estructura recursiva del problema y escribirla como una recurrencia" (modelado) y "Resolver la recurrencia obtenida de forma ascendente" (algoritmos). Siento que la programación dinámica (en algoritmos) se refiere a ambos, y este es también el caso de la programación lineal, la programación de enteros, la programación semidefinida, etc.
Yoshio Okamoto
1
Algunas veces se usan tablas . La programación dinámica sobre árboles (por ejemplo: conjunto independiente máximo) normalmente no usa una tabla [= matriz] para memorizar la recurrencia; utiliza un árbol, o en algunos casos un árbol de matrices, o una matriz de árboles, o en algunos casos un producto cartesiano de árboles. De manera similar, para la programación dinámica sobre dags o la programación dinámica sobre descomposiciones de árbol para gráficos de ancho de árbol acotado.
Jeffε
1
JeffE, el nombre de una técnica casi nunca cubre todas las aplicaciones. Tome "diagonalización", por ejemplo; En aplicaciones avanzadas, no hay diagnóstico a la vista (o al menos no es un área de acción exclusiva). Pero de todos modos no estoy demasiado enamorado del "relleno de la mesa", aunque creo que podría ser un nombre razonable para los principiantes.
Raphael
3
Mis 2 centavos sobre este tema. La programación dinámica tiene dos aspectos distintos para diseñar algoritmos. Primero es entender la mecánica de dp como en: recursión inteligente más memorización que conduce a un algoritmo más rápido. El segundo aspecto es cómo reconocer que un problema puede admitir una recursión inteligente y llegar a ella. Ambos son importantes para enseñar. Para este último, un caso común es dividir y conquistar con interacción limitada y, en mi opinión, vale la pena destacarlo explícitamente.
Chandra Chekuri
1

Vista recursiva u horizonte recursivo

marca
fuente
Horizonte perezoso? Retrasará el cálculo de muchos resultados hasta que sean necesarios. DP no necesita ser recursivo.
Chad Brewbaker
0

Lo llamaría "Reenvío hacia adelante con memorización".

Benjamín
fuente