- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
动态规划:【1】.矩阵乘法链,最小乘法次数。一、问题描述给定一个矩阵序列A1,A2,…,An,计算乘积A1A2…An。要求找出一个加全部括号的方式,使得标量乘法的次数最小。对于任意两个矩阵AiAi+1相乘,其乘法次数为pi-1pi pi+1,不同的加全部括号,所需要的乘法次数可能相差很大。假设现在有三个矩阵A1A2A3相乘,维数分别为:10×100,100×5,5×50。1、如果我们采用如下方式加全部括号:((A1A2)A3)则首先计算(A1A2),乘法次数为p0p1 p2,得到新矩阵的维数为p0× p2计算((A1A2)A3),乘法次数为p0p2 p3,总的计算次数为p0p1 p2+ p0p2 p3=10×100×5+10×5×50=75002、如果我们采用如下方式加全部括号:(A1(A2 A3))则首先计算(A2 A3),乘法次数为p1 p2 p3,得到新矩阵的维数为p1× p3计算(A1(A2 A3)),乘法次数为p0p1 p3,总的计算次数为p1 p2 p3+ p0p1 p3=100×5×50+10×100×50=75000第二种方式需要的次数是第二次的10倍!二、问题分析:由前面可知,一个序列如果只有一个矩阵,则只有一种方式加全部括号,如果有两个或两个以上的矩阵,则必然可以看做两个子序列的乘积,且这两个子序列也是加全部括号。我们用cost(i,j)表示序列Ai…Aj在最优加全部括号时的标量乘积次数,则其中p(i-1)p(k) p(j)为子序列Ai…Ak与Ak+1…Aj相乘时的标量相乘次数。顺序连城可以把最后一个单个的看成单独加括号。三、问题求解每一对满足1≤i≤j≤n的i和j都对应原问题的一个子问题,子问题个数为动态规划(二):矩阵链乘法,其中第一项表示ij时的子问题个数,后一项表示i=j时的子问题个数。如果采用递归方法求解,则每个子问题都会被求解多次,可以保留中间结果。另外我们也采用自底向上的动态规划方式求解。首先定义一个二维矩阵value,value[i][j]存放子序列Ai…Aj在最优加全部括号时的标量乘积次数,我们只使用j=i的部分,且value[i][i]=0。动态规划的实现步骤如下:步骤一:令step=0;步骤二:对于所有i=0,…,n,计算并保存value[i][i+step];步骤三:若step=n-1,则结束,否则step=step+1,返回步骤二。矩阵维数A130×35A235×15A315×5A45×10A510×20A620×25//实现思想:1.令step不同,即(j-i)不同;2.从i到j选择不同的分割点k。i = k j;求出极大值。记录分割的位置。三重循环,从底层开始;首先分析:step=1,得到组合(1,2)、(2,3)、(3,4)、(4,5)、(5,6);step=2,得到组合(1,3)、(2,4)、(3,5)、(4,6);而其中,step=2,要用到不同的k了。(1,2)3或者1(2,3);同理step=3,得到组合(1,4)、(2,5)、(3,6);要用到不同的k了。1(2,3,4)或者(1,2)(3,4)或者(1,2,3)4;这些都是step为小的时候得到的。最终得到的step=5,得到组合(1,6)。才是我们需要的。【2】.装配线调度问题。现有两条装配线,Sij表示第i条上完成第j道工序的装配站。汽车完成组装需要依次完成1~n工序。请找出完成装配并离开装配线的最快路线。符号说明:ei:汽车进入装配线i的时间,i=1,2xi:汽车离开装配线i的时间aij:在装配站Sij完成装配需要的时间tij:在装配站Sij完成后离开第i条装配线,进入另一条装配线需要的转移时间注意,如果完成工序后,下一个工序还在同一条装配线上,则不需要转移时间。问题求解:用Fij表示在第i条装配线上完成第j道工序的最快时间,用F表示完成汽车装配并离开装配线的时间,如果知道F1n和F2n,则有:要求出F1n和F2n,需要知道F1n-1和F2n-1,则有故得到递推公式:2、动态规划如果我们不是从上到下求解,而是从下到上求解,求解结果在某个地方保存起来,则可以大大改善求解速度。这里的动态min只有两个部分,只有一个存在递归的形式,而上面哪一个却又两个递归的部分。// 同理递增也是一样的,动态规划,甚至更简单写,由于只是自身的记录。而公共的则是两个。原理都是动态规划的。【3】.最长公共子序列问题和编辑距离问题。longest common subsequence。子序列是不要求连续相等的字符序列。这个问题也是算法导论上提过的问题。注意这个问题是Subsequence不是Substring。substring的话就是子串,子串的要求的连续相等的字符序列,而subsequence不要求连续。比如说ABCD和ABD。他
原创力文档


文档评论(0)