设计备忘录解矩阵链(动态规划法)的一些思考

动态规划法求解问题的时候,空间换时间的时候,怎么去记,应该记什么。空间计算值得过程可以有效的理解备忘录,备忘录实际上就是一张表格,帮助我们求解子问题。

一、操作过程:

现在有五个矩阵,有六个数来表示,每个矩阵的行号、列号都是已知的,就是从里面挑出相邻的两个值,六个数表示五个矩阵的项矩阵链,接下来记录子问题。

1、输入

P = < 30, 35, 15, 5, 10, 20 >, n = 5

2、矩阵链

A1A2A3A4A5,其中A1:30×35,A2:35×15,A3:15×5,A4:5×10,A5:10×20

3、备忘录

存储所有子问题的最小乘法次数及得到这个值的划分位置.

(1)r表示长度

首先是长度为1的,把r=1这一行先写好,这一行刚好有5列,每一列的值都是0。这个m表示最少的次数。

r=2长度为2这一行的计算要借助第一行来计算

(2)例:

例如m[2,5]的计算,k的位置可以有很多种选择,第1种选择,左边界2和2所构成的子链,右边是3→5所构成的另一个子链,m[2,2]和m[3,5]的结果,因为是逐层计算的,所以已知m[2,2]和m[3,5]的结果进行计算。

m[2,5] = min{ 0 +2800+35x15x20,2625+1000+35x5x20,4735+0+35x10x200 }=7125

把左边的结果加上右边的结果,第2个矩阵的规模是35x15,第3到第5构成的子链规模是15x20,所以最后乘到最后,一定是以第5个矩阵结束的列号作为最终的列号。综合求解过程:子问题1、子问题2、综合的过程。计算出来
过程

(3) 过程

①r=1
m[1][1]= m[2][2] = m[3][3] = m[4][4] =m[5][5]=0
②r=2
m[1][2] = 30x35x15 = 15750
m[2][3] = 35x15x5 = 2625
m[3][4] = 15x5x10 = 750
m[4][5] = 5x10x20 = 1000
③r=3
m[1][3] =min(m[1][1]+m[2][3]+A1(A2A3),m[1,2]+m[3,3]+ (A1A2)A3
=min(m[1][1]+m[2][3]+P0P1P3,m[1,2]+m[3,3]+P0P2P3
=min(0+2625+30x35x5,15750+0+30x15x5)
=min(7875,18000)=36,s[1][3]=1
m[2][4]=min(m[2][2]+m[3][4]+A2(A3A4),m[2][3]+m[4][4]+(A2A3)A4
=4375,s[2][4]=3
m[3][5]==min(m[3][3]+m[4][5]+A3(A4A5),m[3][4]+m[5][5]+(A3A4)A5
=2500,s[3][5]=3
④r=4
m[1][4]=min(m[1][1]+m[2][4]+ A1(A2A3A4)+m[1][2]+m[3][4] + (A1A2)(A3A4), m[1][3]+m[4][4]+ (A1A2A3)A4
=9375,s[1][4]=3
m[2][5]=min(m[2][2]+m[3][5]+ A2(A3A4A5),m[2][3]+m[4][5] + (A2A3)(A4A5), m[2][4]+m[5][5]+ (A2A3A4)A5
=7125,s[2][5]=3
⑤r=5
m[1][5]=min(m[1][1]+m[2][5]+ A1(A2A3A4A5),m[1][2]+m[3][5] + (A1A2)(A3A4A5) ,m[1][3]+m[4][5]+(A1A2A3)(A4A5)
=11875,s[1][5]=3

备忘录

r=1m[1][1]=0m[2][2]=0m[3][3]=0m[4][4]=0m[5][5]=0
r=2m[1][2]=15750m[2][3]=2625m[3][4]=750m[4][5]=1000
r=3m[1][3]=7875m[2][4]=4375m[3][5]=2500
r=4m[1][4]=9375m[2][5]=7125
r=5m[1][5]=11875
(4)标记函数s[i,j]
r=2s[1][2]=1m[2][3]=2m[3][4]=3m[4][5]=4
r=3m[1][3]=1m[2][4]=3m[3][5]=3
r=4m[1][4]=3m[2][5]=3
r=5m[1][5]=3

解的追踪:s[1,5]=3⇒(A1A2A3)(A4A5)
s[1,3]=1⇒A1(A2A3)

输出
计算顺序: (A1(A2A3))(A4A5)
最少的乘法次数:m[1,5]=11875

二、递推方程

其实比较难想到的,比较难进行的就是递推方程,要想到问题如何分解,为什么会有这样的关系,这些是难于想到的,尤其是在一个问题在做一个新的问题的时候,可能不是那么明显能看出来。

m[i,j] :得到 Ai…j 的最少的相乘次数
在这里插入图片描述

三、动态规划算法

1、子问题划分

Ai…j :矩阵链 Ai Ai+1 … Aj,边界i, j
输入向量: < Pi-1, Pi, … , Pj >
其最好划分的运算次数: m[i, j]

2、子问题的依赖关系

最优划分最后一次相乘发生在矩阵k 的位置,即
Ai…j = A~i …k~ Ak+1…j
Ai…j 最优运算次数依赖于 Ai…k 与 Ak+1…j 的最优运算次数

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

极客范儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值