讨论动态规划的优点 - 相比于穷举法 - (以最短路径为例)

来源:互联网 发布:js获取td中的内容 编辑:程序博客网 时间:2024/04/30 03:41

讨论动态规划的优点 - 相比于穷举法 - (以最短路径为例)

一、熟知动态规划有以下的优点:

优点1.减少了计算量,随着段数的增加,计算量大大减少。

优点2.计算中得到了很多有用的中间过程,不仅得到了出发点到终点的最短路径,而且得到了中间各点到终点的最短路径。

二、回顾动态规划的基本思想:


三、通过以下例子,我们将清楚的看到动态规划的优点:(以最短路径为例)

1、段数较少

以下的图为例


说明动态规划的优点,这里我们以整个过程中做的加法次数为指标,次数越少,我们认为计算量越好,效率越高。

穷举法的加法次数:1*2*3*1 = 6

动态规划(逆向D->A):2*3+1*2 = 8

(说明:动态规划第一步从B->D,不从C->D,C->D不存在选择最短路)

这个似乎不能说明动态规划比穷举法的计算量小,其实是阶段数较少,当阶段数增加后,动态规划的优势明显体现。

2、段数较多


(假设每一层的某个状态都可以到达下一层的每个状态)

穷举法的加法次数:1*2*3*4*4*3*2*1 = 576

动态规划(逆向D->A):3*2+4*3+4*4+3*4+2*3+1*2 = 54

这下明显可以看出动态的优势,大大减少了计算量;至于说得到有用的中间量,这个不用多解释。

3、量化直接说明动态规划减少计算量的优势

以二中的特殊情况为例,两边对称,段数为偶数的情况,所以一共有2n个阶段(加上始末)。

穷举法的加法次数:(1*2*3*…*n)^2 = (1*2*3*…*n)*(1*2*3*…*n

动态规划的加法次数:(n*n+(n-1)n+(n-2)(n-1)+...+1*2)*2-1*2(n*n+(n-1)n+(n-2)(n-1)+...+1*2)*2 < (n*n+(n-1)n+(n-2)n+...+1*n)*2 = (n+(n-1)+(n-2)+...+1)*n*2

当n>3时,(1*2*3*…*n)> (n+(n-1)+(n-2)+...+1) 这个成立,随着n变大差距越越大,毕竟是相乘嘛!

(1*2*3*…*n)> n*2

所以很明显,当段数增加时,动态规划的计算量是成倍成倍的减少。

四、注意动态规划中的无后效性(马尔可夫性)

如果某阶段状态给定后,则在这个阶段以后过程的发展不受这个阶段以前各段状态的影响;
过程的过去历史只能通过当前的状态去影响它未来的发展;构造动态规划模型时,要充分注意是否满足无后效性的要求;

0 0