Cómo reducir la programación dinámica a programación lineal

Un buen ejemplo de tal reducción es el problema de la ruta más corta (específicamente para gráficos acíclicos dirigidos ya que estamos tratando con programación dinámica). La solución de programación dinámica para este problema es bastante sencilla. Así es como se ve la formulación de programación lineal:

En general, las reducciones a la programación lineal (o la programación lineal entera si desea mostrar que un problema es NP-hard) requieren que defina algún tipo de variables indicadoras y cree una formulación de minimización o maximización del problema. Definitivamente no son las reducciones más fáciles, pero dan algunas ideas interesantes sobre una perspectiva diferente del problema.

En una especie de nota al margen relacionada, la dualidad de la formulación del programa lineal para el problema de la ruta más corta puede casi “visualizarse” de una manera realmente sorprendente. En lugar de tratar de encontrar la ruta que minimiza el peso desde el nodo inicial hasta el final, si imaginamos los bordes del gráfico como cadenas sueltas conectadas entre sí en los nodos, el programa lineal dual esencialmente hace la pregunta de la cantidad máxima de la que podemos extraer el nodo inicial el nodo final hasta que la cadena esté tensa. Sinceramente, pensé que esto era lo mejor cuando aprendí sobre eso.

More Interesting

¿Cuáles son los diferentes factores involucrados en el análisis del algoritmo?

¿Qué algoritmos avanzados usa un sitio como Facebook?

¿Es posible implementar algoritmos de aprendizaje automático en lenguaje ensamblador?

Cómo entender la notación big-O

¿Por qué usamos algoritmos?

¿Qué tan difícil fue crear e implementar el algoritmo de clasificación de página inicial de los primeros Google?

¿De dónde viene la palabra algoritmo?

¿Qué tipo de algoritmo SLAM es adecuado para una aceleración con FPGA o FPGA-SoC?

¿Hay algún libro sobre estructuras de datos y algoritmos que tenga estructuras de datos diferentes, su complejidad, sus usos y todas las cosas interesantes sobre ellos?

¿Existen campamentos de programación a tiempo completo en Europa para mejorar la programación o las estructuras de datos y habilidades de algoritmos?

¿Qué series matemáticas debo saber para calcular la complejidad de cualquier algoritmo o pseudocódigo?

Cómo contar el número de enteros palindrómicos dentro de un rango [A, B] donde A y B pueden ser de hasta 10 ^ 17

Para ubicarse dentro del top 3 en el próximo ICPC regional, ¿qué le sugeriría a un codificador de nivel medio que tenga suficiente conocimiento?

Cómo implementar la generación de números aleatorios a nivel de hardware

Dados los pares 'n1' de corchetes "[]", los pares 'n2' de corchetes "{}" y los pares 'n3' de corchetes "()", ¿cómo podemos encontrar todas las combinaciones válidas posibles de todos estos pares de manera eficiente?