算法基础-8.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
算法基础-8

Chapter 8 DYNAMIC PROGRAMMING 8.9 凸多边形三角剖分 问题: n+1凸边形 P(0,1,2,3,…,n) 三角剖分,如图-1 剖分边总长度最小的 Chapter 8 DYNAMIC PROGRAMMING 最优子性质: 设 T(0,n)是n+1凸边形的最优值 T(0,n)=min{T(0,k)+T(k,n) +Δ(0,k,n)} 证明: (1)= :T(0,n)是最优的,则T(0,k)和T(k,n)是最优的。 反正,设T(0,k)或T(k,n)不是最优的,则用最优的替换其后T(0,n)会更小,矛盾; 0 n k Chapter 8 DYNAMIC PROGRAMMING (2)= :若对k=2,3,4,…,n-1都有 T(0,k)和T(k,n)是最优的,显然T(0.n)是最优的; 递归定义最优值: 设 子问题 A(i,j)是P(i,i+1,…,j),其最优值记为t[i][j]; t[i][j]=0; i=j-1 t[i][j]=min{t[i][k]+t[k][j]+w(ikj)} ij-1 自底向上计算子解最优值: Chapter 8 DYNAMIC PROGRAMMING 自底向上计算子解最优值: 例: t[1][5]=min t[1][2]+t[2][5]+w(025) t[1][3]+t[3][5]+w(035) t[1][4]+t[4][5]+w(045) 填表顺序: for (i==n-1; i=1, i--) for (j==i+1; jn) calculate(t[i][j]) 0 0 0 o 0 o 0 o 0 o o o T 0 1 2 3 4 5 6 j i 6 5 4 3 2 1 Chapter 8 DYNAMIC PROGRAMMING 自底向上计算子解最优值: PROCEDURE calculate(i,j) t[i][j]=s[i][j]=Max for (k==i+1; kj; k++) v=t[i][k]+t[k][j]+ w(ikj); if (vt[i][j]) { t[i][j]=v; s[i][j]=k } 0 0 0 o 0 o 0 o 0 o o o T 0 1 2 3 4 5 6 j i 6 5 4 3 2 1 Chapter 8 DYNAMIC PROGRAMMING 构造最优解: S[0][n]=k S[0][k] S[k][n] 可递归求得。 0 n k Chapter 8 DYNAMIC PROGRAMMING 作业: A和B是两个字符串,用最少的字符操作将A转换为B,操作包括:删除1个字符、插入1个字符、替换1个字符。 一个n阶正整数矩阵,给定一个整数k,求出最长的一条线(子行,子列,子斜线),其和小于等于k。 选做一题; Chapter 8 DYNAMIC PROGRAMMING 当ij时,m[i][j]=min{m[i][k]+m[k+1][j]+pi-1*pk*pj} (i=kj)。 除此之外,若将对应于m[i][j]的断开位置记为s[i][j],在计算出最优值m[i][j]后,可以递归地由s[i][j]构造出相应的最优解 Chapter 8 DYNAMIC PROGRAMMING (3)计算最优值。 如果直接套用m[i][j]的计算公式,进行简单的递归计算需要耗费指数计算时间。然而,实际上不同的子问题的个数只是n的平方项级(对于1=i=j=n不同的有序对(i,j)对应于不同的子问题)。用动态规划解决此问题,可依据其递归式以自底向上的方式进行计算。在计算过程中,保存已解决的子问题答案。每个子问题只计算一次,而在后面需要时只要简单查一下,从而避免大量的重复计算,最终得到多项式时间的算法。 Chapter 8 DYNAMIC PROGRAMMING 态规划算法: void matrixChain (int * p, int n, int * * m, int * * s) {? for ( int i=1;i=n;i++)??????? m[i][i]=0; ??? for ( int r=2;r=n;r++) //链长度控制

文档评论(0)

dajuhyy + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档