动态规划学习记录

参考资料:

网上看了很多博客,都不是太靠谱。最后阅读了下《运筹学第三版》(清华大学出版社),感觉里面的内容将的比较透彻,细节上也写的很好。

大体介绍

文中主要用动态规划和穷举进行比较,如下图中的问题,从A点到G点的最短路径。

穷举法的话, 就要对 48 条路线进行比较, 运算在计算机上进行时,比较运算要进行 47 次;求各条路线的距离, 即使用逐段累加方法,也要进行6 + 12 + 24 + 48 + 48 = 138 次加法运算。

而动态规划比较运算(从 k = 5 段开始向前算)共进行 3 + 3 + 4 + 4 + 1 =15 次。每次比较运算相应有两次加法运算, 再去掉中间重复两次(即 B 1 →C 1 , B 2 → C 4 各多算了一次) , 实际只有 28 次加法运算。可见, 动态规划方法比穷举法减少了计算量。而且随着段数的增加,计算量将大大地减少。

具体是如何减少的呢?

穷举法每次选择一条线路,从前算到尾,一共算了48条线路,最后比较48条线路的结果。而动态规划是从后往前算,先算k=5阶段哪个点是最优点,再算k4阶段哪个是最优点,一步一步最后将最优点连接起来,减少了重复的计算。

动态规划的使用的场景和其最优性

基本思想:如果由起点 A 经过 P 点和 H 点而到达终点 G 是一条最短路线,则由点 P 出发经过 H 点到达终点 G 的这条子路线, 对于从点 P 出发到达终点的所有可能选择的不同路线来说,必定也是最短路线。基于这个思路就可以推导出动态规划的思路,从后往前反推最优解。

使用场景的话,那必然就是符合基本思想中所提到的条件了。

具体细节

见原文

缺点

假如最后面的节点太多了的话,就会很耗费内存。比如一个树形无环图,最后的枝叶节点会非常非常多,而从枝叶开始往前算也会很复杂,也就是相比于直接穷举快了很多而已。

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章