¿Hay alguna diferencia entre la programación dinámica de arriba hacia abajo y de abajo hacia arriba?


33

¿Existe una diferencia fundamental entre la programación dinámica de arriba hacia abajo y de abajo hacia arriba?

En particular, ¿hay algún problema que pueda resolverse de abajo hacia arriba pero no de arriba hacia abajo? ¿O es el enfoque ascendente solo un desenrollamiento de la recurrencia en el enfoque descendente?

Respuestas:


27

Para utilizar el método de abajo hacia arriba, debe poder determinar de manera eficiente cuál es el "fondo", lo que generalmente significa que necesita un espacio de problemas muy limitado. Si sabe cuáles serán los cálculos de nivel más bajo y el orden de dependencia va hacia arriba, tiene sentido hacerlos iterativamente en el orden correcto y almacenar esos resultados. Los factoriales, la ingenua Fibonacci y la relación de recurrencia de Euler para particiones son buenos ejemplos de problemas adecuados para este enfoque.

Algunos problemas no tienen un orden inferior o de dependencia fácil de determinar para los cálculos. Las evaluaciones de posiciones de ajedrez, por ejemplo, se memorizan útilmente por posición, con el puntaje de evaluación almacenado, por lo que no es necesario volver a calcularlo. Las posiciones pueden repetirse en múltiples niveles del árbol de búsqueda debido a la transposición y la repetición del movimiento, por lo que vale la pena guardar los resultados de la evaluación. Pero no hay forma de saber cuáles serán las posiciones en los niveles más bajos del árbol sin descender recursivamente (y teniendo en cuenta la poda intermedia), por lo que de arriba hacia abajo es realmente el único enfoque factible.


4
  • Enfoque de arriba hacia abajo: esta es la caída directa de la formulación recursiva de cualquier problema. Si la solución a cualquier problema puede formularse de manera recursiva utilizando la solución a sus subproblemas, y si sus subproblemas se superponen, entonces uno puede fácilmente memorizar o almacenar las soluciones a los subproblemas en una tabla. Cada vez que intentamos resolver un nuevo subproblema, primero verificamos la tabla para ver si ya está resuelta. Si se ha registrado una solución, podemos usarla directamente; de ​​lo contrario, resolveremos el subproblema y agregaremos su solución a la tabla.

  • Enfoque ascendente: una vez que formulamos la solución de un problema de forma recursiva en términos de sus subproblemas, podemos intentar reformular el problema de manera ascendente: primero intente resolver los subproblemas y use sus soluciones para construir y llegar a soluciones a subproblemas más grandes. Esto también se hace generalmente en forma de tabla generando iterativamente soluciones a subproblemas cada vez más grandes mediante el uso de soluciones a subproblemas pequeños. Por ejemplo, si ya conocemos los valores de F41 y F40, podemos calcular directamente el valor de F42.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.