¿Te gusta la categoría de algoritmos de ‘programación dinámica’?

Creo que descubrí de dónde viene tu confusión. “Desglosar un problema en subproblemas”, y específicamente la palabra “problema”, puede tener diferentes significados según el contexto: por ejemplo, en el diseño orientado a objetos, el problema podría ser algo así como “construir un clon de eBay”, y el subproblemas: “módulo de cuenta de compilación”, “módulo de subasta de compilación”, etc., mientras que aquí el problema es, digamos, una lista de números, y los subproblemas son listas más cortas que puede hacer al dividir la lista más grande.

“Programación dinámica” se refiere a una técnica específica, y de otra manera no tiene nada que ver con “dinámica” o “programación” – es una técnica de optimización matemática. Sobre cómo se inventó ese nombre, esto es lo que dice la autobiografía de Richard Bellman al respecto:

“Una pregunta interesante es: ‘¿De dónde viene el nombre, la 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. Era Secretario de Defensa, y en realidad tenía un miedo patológico y odio a la palabra, investigación. […] Puedes imaginar cómo se sintió, entonces, sobre el término matemático. 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 la programación dinámica era un buen nombre. Era algo a lo que ni siquiera un congresista podría oponerse. Así que lo usé como un paraguas para mis actividades ”

Entonces sí, definitivamente es su propia categoría de algoritmos, y aunque el nombre es un poco extraño, este es casi siempre el caso cuando se trata de terminología: al final, solo elige alguna palabra o combinación de palabras, y siempre Como todos los involucrados saben a qué se refieren, puedes comunicarte más rápido. No importa si las palabras no tienen sentido o no, son solo un símbolo.

Hay más para agregar en el algoritmo de programación dinámica porque ayuda a optimizar el código, pero más que eso, las matrices de rendimiento del tiempo de ejecución, como el uso adecuado de la memoria en tiempo de ejecución. Mira esto:

Muchos programas en informática están escritos para optimizar algún valor; por ejemplo, encuentre el camino más corto entre dos puntos, encuentre la línea que mejor se ajuste a un conjunto de puntos o encuentre el conjunto más pequeño de objetos que satisfaga algunos criterios. Existen muchas estrategias que los informáticos utilizan para resolver estos problemas. Uno de los objetivos de este libro es exponerlo a varias estrategias diferentes de resolución de problemas. La programación dinámica es una estrategia para este tipo de problemas de optimización.

Un ejemplo clásico de un problema de optimización implica realizar cambios utilizando la menor cantidad de monedas. Supongamos que usted es un programador para un fabricante de máquinas expendedoras. Su empresa quiere agilizar el esfuerzo al dar la menor cantidad de monedas posibles a cambio para cada transacción. Supongamos que un cliente ingresa un billete de un dólar y compra un artículo por 37 centavos. ¿Cuál es la cantidad más pequeña de monedas que puedes usar para hacer un cambio? La respuesta es seis monedas: dos cuartos, un centavo y tres centavos. ¿Cómo llegamos a la respuesta de seis monedas? Comenzamos con la moneda más grande en nuestro arsenal (una cuarta parte) y usamos la mayor cantidad posible, luego pasamos al siguiente valor de moneda más bajo y usamos la mayor cantidad posible. Este primer enfoque se llama método codicioso porque tratamos de resolver de inmediato la mayor parte del problema posible.

Referencia: programación dinámica

La “programación dinámica” es un método de programación importante. Hay algunos problemas que no pueden resolverse, o no pueden resolverse bien, por ningún otro método.

Pero eso está lejos de decir que es “solo una mejor práctica en general”. Es una “mejor práctica” para un determinado subconjunto de problemas, un subconjunto que debería haber sido descrito por cualquier libro sobre algoritmos informáticos en el que haya encontrado el término “programación dinámica”.