DP算法(Dynamic Programming,俗称动态规划)是最经典算法之一

DP算法(Dynamic Programming,俗称动态规划)是最经典算法之一.本笔记以耳熟能详的数塔问题为引子,深入讨论01背包的解决方法.

  首先,如下图所示,要求从顶层走到底层,若每一步只能走到相邻的结点,则经过的结点的数字之和最大是多少?

《DP算法(Dynamic Programming,俗称动态规划)是最经典算法之一》

  这个问题,对于任意一个结点,直接选择数字大的子结点显然是不行的.以9为例,如果选择15,当前和24>21,但是15的两个子结点太小,24+6+18<21+10+18.由此可见,这样求出每阶段的部分最优解并不是全局最优解.另外,如果用蛮力算法,每条路径都遍历一次,那么层数为n时,路径总数呈指数级增长:

《DP算法(Dynamic Programming,俗称动态规划)是最经典算法之一》

  显然这种方法的计算量太大,也不可取.那么此时用DP算法是行之有效的.具体思想为:从倒数第二层开始,一层一层向上遍历.倒数第二层第一个结点是2,如果路径经过2,那么肯定会选择数值较大左子结点19. 便用19+2=21代替原先的2. 同理18改为18+10=28,9改为19,5改为21. 这样倒数第二层就变成21 28 19 21四个结点,再将最后一层舍弃.这样一层层向上,直到第一层,选择第二层较大的那个结点加到9上面去,就得出了全局最优解.

  代码实现:如果数字塔为n层,开辟一个n*n的二维数组即可,非常简单,此处省略.

    原文作者:动态规划
    原文地址: https://blog.csdn.net/zh123456zh789/article/details/55289297
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞