[MIT6.006] 19. Daynamic Programming I: Fibonacci, Shortest Path 动态规划I:斐波那契,最短路径
这节课讲动态规划的内容,动态规划是一种通用且有效的算法设计思路,它的主要成分是“子问题”+"重用"。它可以用于斐波那契和最短路径等问题的求解上。
一、斐波那契
首先,我们来看下斐波那契问题是什么?传统做法和动态规划法有什么区别?
从上图就能很明显地看出动态规划采用了memorization的思路,将历史计算结果保存下来,这样就能避免递归过程中的重复计算。
我们总结动态规划在求解斐波那契数的内容如下:
记录召回(Memorized calls)只花常数时间。动态规划大致内含三大做法:recursion + memorization + guessing。对子问题的记录和重用有利于高效地帮助解决最后的大问题。时间上:子问题数 x 每个子问题上的求解时间。
除了上面使用递归recursion方法去做,还有下面这种从下至上的动态规划法:
这种方法的与递归方法做是一样的计算量,但是更省空间。
二、最短路径
动态规划法求解最短路径问题的方法就是猜guessing,递归所有可能的线路去获取最短的路径结果,如下图:
但动态规划法如果单凭猜,是不能处理好如下图所示的循环图上的最短路径问题:
为此,动态规划一般会把循环图转化为非循环图后,再进行最短路径的求解,如下图所示:转为非循环图的过程是把原循环图进行分层,其中下图的k是指第k层,具体的运行机制,讲师讲的有些过于仓促,我也没太听明白,该内容后续有待自行补充了解。
曼彻斯特大学 数据科学研究生 已毕业
现居地:深圳
兴趣领域:数据挖掘,机器学习及计算机视觉
博客:https://www.cnblogs.com/alvinai/
公众号:zaicode
Github:https://github.com/AlvinAi96
邮箱:alvinai9603@outlook.com
现居地:深圳
兴趣领域:数据挖掘,机器学习及计算机视觉
博客:https://www.cnblogs.com/alvinai/
公众号:zaicode
Github:https://github.com/AlvinAi96
邮箱:alvinai9603@outlook.com

浙公网安备 33010602011771号