快速入门算法:动态规划

动态规划问题的一般形式是“最值问题”,如:最长递增子序列、最小距离等等

那么计算机如何求解动态规划问题,其实就只有一种方法“穷举法”,没错,就是暴力的穷举出所有情况,然后在所有答案中找到一个最优的解,这就是动态规划最基本的思想。

但是穷举是基本思想,动态规划还有其独特之处,首先动态规划这类问题存在“重叠子问题”,如果直接完全暴力穷举算法效率会非常低,存在大量的重复计算,需要用备忘录或者维护一个DP table来优化穷举过程,将计算过的值存储下来,避免冗余计算。其次,动态规划问题一定具备“最优子结构”,这样才能通过子问题的最值得到原问题的最值。同时动态规划问题一定要具备“最优子结构”,才能通过子问题的最值问题得到原问题的最值。最后,动态规划需要列出 “状态转移方程”才能正确的穷举。

 

你可能感兴趣的:(编程学习)