¿Es necesario pensar en una solución recursiva primero antes de proceder a resolver un problema de DP?

} Pensar en una solución recursiva, o una relación de recurrencia es la parte más importante para resolver el problema de DP. Es posible que no escriba explícitamente la función recursiva que implica el cálculo y la memorización, pero siempre necesita averiguar las variables y la función de esas variables que resolverán el problema.

Creo que encontrar la solución recursiva es útil en las etapas iniciales, ya que encuentro que el enfoque de arriba hacia abajo es más intuitivo .
Entonces, si desea seguir el enfoque de arriba hacia abajo, una solución recursiva es la solución al problema de DP.
Si desea tener una solución de abajo hacia arriba, descubrir la función recursiva es tan bueno como encontrar la solución exacta, excepto que primero debe completar los casos base y escribir una solución iterativa.

Por ejemplo, consideremos que desea encontrar el coeficiente binomial [math] ^ nC_r [/ math].
Puede descubrir que [matemáticas] ^ nC_r [/ matemáticas] [matemáticas] = [/ matemáticas] [matemáticas] ^ {n-1} C_ {r-1} [/ matemáticas] [matemáticas] + [/ matemáticas] [ matemática] ^ {n-1} C_ {r} [/ matemática], que es la relación de recurrencia para resolver este problema con la ayuda de la programación dinámica.
No estoy seguro de cómo se puede resolver este problema con la programación dinámica, si no se le ocurre esto u otra recurrencia válida 🙂

Por lo tanto, encontrar una solución recursiva es básicamente equivalente a encontrar la solución completa.

Absolutamente. “Programación dinámica” es solo un término elegante. Las características muy básicas que definen este término son:

  1. Estructura óptima : se puede obtener una solución óptima del problema dado mediante el uso de soluciones óptimas de sus subproblemas
  2. Subproblemas superpuestos: los subproblemas se superponen

Lo que en otras palabras significa que,
programación dinámica = algoritmo recursivo donde las sub-llamadas recursivas se superponen.

More Interesting

¿Cuál es el algoritmo de Apache Hadoop?

¿Por qué el hashing geométrico es más eficiente que usar una matriz indexada de las coordenadas de los puntos característicos?

¿Necesitamos aprender el algoritmo primero antes de aprender el desarrollo web?

¿Está roto el algoritmo de clasificación de Java y Python?

¿Las funciones de JavaScript como map (), reduce () y filter () ya están optimizadas para recorrer la matriz?

¿Qué bases de datos tienen implementaciones muy eficientes de estructuras de datos de índice R-Tree?

¿Qué hace exactamente node = node-> next en una lista vinculada?

Procesadores de señal digital (DSP): cuando alguien escribe un archivo en una tarjeta SD usando un bus spi, ¿cómo sabe dónde debería estar el comienzo de un nuevo archivo?

¿Cuáles son los mejores métodos para el análisis competitivo?

¿Por qué mi solución C ++ al problema SPOJ.com - Problema DIVSUM2 muestra un error?

¿Dónde puedo encontrar un algoritmo de relevancia marginal máxima en Python para la eliminación de redundancia en dos documentos?

¿Cuál es la mejor manera de saber qué estrategia (codiciosa, dividir y conquistar, programación dinámica) funcionaría mejor para un problema de algoritmo en particular?

Cómo resolver este problema de matrices en programación en C

Actualmente estoy leyendo un libro sobre estructuras de datos y algoritmos. ¿Cuáles son algunos recursos que puedo usar para practicar la implementación?

¿Por qué una elección de K es mejor que otras en el algoritmo K-means?