- 24
- 0
- 约4.63千字
- 约 9页
- 2017-08-14 发布于河南
- 举报
动态规划法(Dynamic Programming)
与分治法类似,动态规划法
也是把问题一层一层地分解为规模逐渐减小的同类型的子问题。
动态规划法与分治法的一个重要的不同点在于,
用分治法分解后得到的子问题通常都是相互独立的,
而用动态规划法分解后得到的子问题很多都是重复的。
因此,对重复出现的子问题,只是在第一次遇到时才进行计算,
然后把计算所得的结果保存起来;当再次遇到该子问题时,
就直接引用已保存的结果,而不再重新求解。
下面我们先看一个例子: 矩阵连乘问题
e.g. 设有矩阵M1,M2,M3,M4,
其维数分别是10(20, 20(50, 50(1 和1(100,
现要求出这4个矩阵相乘的结果。
我们知道,若矩阵A的维数是p(q,矩阵B的维数是q(r,
则A与B相乘后所得矩阵AB的维数是p(r。
按照矩阵相乘的定义,
求出矩阵AB中的一个元素需要做q次乘法(及q-1次加法)。
这样,要计算出AB就需要做p(q(r次乘法。
为简单起见,且由于加法比同样数量的乘法所用时间要少得多,
故这里我们暂不考虑加法的计算量。
由于矩阵连乘满足结合律,故计算矩阵连乘的方式可以有多种。
例如,我们可以按M1(M2(M3M4))的方式去计算,
也可以按(M1(M2M3))M4的方式去计算,所得结果是相同的。
但是值得注意的是,
按前一方式计算需要做125,000次乘法,
而按后一方式计算
原创力文档

文档评论(0)