动态规划技术的基本要素 以及 矩阵链乘法典型问题

分治技术的问题
子问题是相互独立的
–如果子问题不是相互独立的,分治方法将重 复计算公共子问题,效率很低
• 例如,计算斐波那契数列的第n项 – F(0)=F(1)=1 – F(n)=F(n-1)+F(n-2)
分治技术的问题
– 子问题是相互独立的
– 如果子问题不是相互独立的,分治方法将重复计算公共子问题,效率很低
• 分治算法 算法F(n)
输入:非负整数n
输出:斐波那契数列第n项
1.If n=0 或1 Then输出1,算法结束
2. f1F(n-1);
3. f2F(n-2);
4. 输出f1+f2;
Why? 时间复杂性 T(1)=T(0)=1 T(n)=T(n-1)+T(n-2) T(n)不是多项式有界的
• 提高效率的方法
– 从规模最小的子问题开始计算
– 用恰当数据结构存储子问题的解,供以后查询 – 确保每个子问题只求解一次
• 算法
算法F(n) 输入:非负整数n 输出:斐波那契数列第n项
1.A[0] =1; A[1]=1;
2. For i=2 To n
3. A[i]=A[i-1]+A[i-2];
4. 输出A[n];
分治技术的问题
–子问题是相互独立的
–如果子问题不是相互独立的,分治方法将重复计算公共子问题,效率很低
• 优化问题
–给定一组约束条件和一个代价函数,在解空 间中搜索具有最小或最大代价的优化解
–很多优化问题可分为多个子问题,子问题相互关联,子问题的解被重复使用

• 动态规划算法特点
– 把原始问题划分成一系列子问题
– 求解每个子问题仅一次,并将其结果保存在 一个表中,以后用到时直接存取,不重复计算,节省计算时间
– 自底向上地计算
• 适用范围
• 一类优化问题:可分为多个相关子问题,子问题的解被重复使用
使用Dynamic Programming的条件
– Optimal substructure(优化子结构)
• 当一个问题的优化解包含了子问题的优化解时, 我们说这个问题具有优化子结构。
• 缩小子问题集合,只需那些优化问题中包含的子 问题,减低实现复杂性
• 优化子结构使得我们能自下而上地完成求解过程 – Subteties(重叠子问题)
• 在问题的求解过程中,很多子问题的解将被多次 使用 How?
• 动态规划算法的设计步骤
–分析优化解的结构
–递归地定义最优解的代价
–自底向上地计算优化解的代价保存之, 并获取构造最优解的信息
–根据构造最优解的信息构造优化解
输入:<A1,A 2,…,An>, Ai是矩阵
• 输出:计算A1 * A2 * … * An的最小代价方法
问题的定义
矩阵乘法的代价/复杂性: 乘法的次数
若A是p * q矩阵,B是q * r矩阵,则A * B 的代价是O(pqr)
HIT CS&E
©DB-LAB(2003)
• 矩阵链乘法的实现 – 矩阵乘法满足结合率。 – 计算一个矩阵链的乘法可有多种方法: 例如, (A1A2A3A4) =(A1(A2*(A3A4))) =((A1A2)(A3A4)) … = ((A1A2)A3)A4)
假设
–m[i,j]=计算Ai * j的最小乘法数
–m[1,n]=计算A1 * n的最小乘法数
–A1 …AkAk+1…An是优化解(k实际上是不可预知)
• 代价方程 m[i,i]= 计算Ai * i的最小乘法数=0
m[i,j]=m [i,k]+m [k+1,j ]+p i-1pkpj
其中,pi-1pkpj是计算Ai * k
Ak+1 * j所需乘法数, Ai * k和Ak+1 * j分别是pi-1
pk和pk
pj矩阵.
考虑到所有的k,优化解的代价方程为
m[i, j]= 0 if i=j
m[i, j]= min{m[i, k]+m[k+1, j]+pi-1 pkpj} ifi<j
Matrix-Chain-Order§
n=length§-1;
FOR i=1 TO n
DO m[i, i]=0;
FOR l=2 TO n DO /计算地l对角线/
FOR i=1 TO n-l+1 DO
j=i+l-1;
m[i, j]=∞;
FOR k = i To j-1 DO /* 计算m[i,j] */
q=m[i, k]+m[k+1, j]+pi-1pkpj
IF q<m[i, j]
THEN m[i,j]=q; s[i,j]=k; //S[i,j]记录AiAi+1…Aj的 最优划分处在Ak与Ak+1 之间
Return m
Print-Optimal-Parens(s, i, j)
IFj=i
THEN Print“A”i;
ELSE Print“(”
Print-Optimal-Parens(s,i,s[i,j])
Print-Optimal-Parens(s,s[i,j]+1,j )
Print “)”
构造最优解
调用Print-Optimal-Parens(s, 1, n) 即可输出A1 - n的优化计算顺序
• 时间复杂性
–计算代价的时间
•(l,i,k)三层循环,每层至多n-1步
•O(n3)
–构造最优解的时间:O(n)
–总时间复杂性为:O(n3)
• 空间复杂性
–使用数组m和S
–需要空间O(n2)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值