[Algoritmos] Programación dinámica - Base teórica

Título Preguntas frecuentes sobre programación dinámica

Conceptos básicos de programación dinámica (secuencia de Fibonacci, subir escaleras), problema de mochila, robo a casa, problema de stock, problema de subsecuencia

Cinco partes de la programación dinámica

  1. En el proceso de transferencia de estado, el significado de la matriz dp y la siguiente tabla;
  2. Encuentra la fórmula recursiva;
  3. Cómo inicializar la matriz dp;
  4. orden transversal;
  5. imprima la matriz dp (útil para verificar su contenido)

Hay otras situaciones a considerar:
"Pensamiento de matriz rodante" es un método común de optimización de programación dinámica, que se ha utilizado muchas veces en nuestros temas, como "La espada apunta a la oferta 46. Traducir números a cadenas", "70. Cuando el El estado que definimos solo está relacionado con unos pocos estados en la ecuación de transición de la programación dinámica. Podemos considerar este método de optimización, cuyo propósito es "reducir la dimensionalidad" de la complejidad del espacio. Si no sabe qué es el "pensamiento de matriz rodante", asegúrese de consultar la información relevante para aprender.

inserte la descripción de la imagen aquí

Definición y distinción de programación dinámica.

动态规划,英⽂:Dynamic Programming,简称DP,如果某⼀问题有很多重叠⼦问题,使⽤动态规划是最有效的。
所以动态规划中每⼀个状态⼀定是由上⼀个状态推导出来的,这⼀点就区分于贪⼼,贪⼼没有状态推导,⽽是从局
部直接选最优的,
在关于贪⼼算法,你该了解这些!中我举了⼀个背包问题的例⼦。
例如:有N件物品和⼀个最多能背重量为W 的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。每件物
品只能⽤⼀次,求解将哪些物品装⼊背包⾥物品价值总和最⼤。
动态规划中dp[j]是由dp[j-weight[i]]推导出来的,然后取max(dp[j], dp[j - weight[i]] + value[i])。
但如果是贪⼼呢,每次拿物品选⼀个最⼤的或者最⼩的就完事了,和上⼀个状态没有关系。
所以贪⼼解决不了动态规划的问题。
其实⼤家也不⽤死扣动规和贪⼼的理论区别,后⾯做做题⽬⾃然就知道了。
⽽且很多讲解动态规划的⽂章都会讲最优⼦结构啊和重叠⼦问题啊这些,这些东⻄都是教科书的上定义,晦涩难懂
⽽且不实⽤。
⼤家知道动规是由前⼀个状态推导出来的,⽽贪⼼是局部直接选最优的,对于刷题来说就够⽤了。

Supongo que te gusta

Origin blog.csdn.net/qq_40500099/article/details/132562799
Recomendado
Clasificación