算法分析与设计课程中矩阵连乘问题的教学探讨.docVIP

算法分析与设计课程中矩阵连乘问题的教学探讨.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
算法分析与设计课程中矩阵连乘问题的教学探讨摘要:文章介绍了算法分析与设计课程中矩阵连乘问题的动态规划算法,利用该算法解决了两道经典竞赛题目,即能量项链问题和石子合并问题。对于能量项链问题,其求解思想是将其转换为一个环形矩阵连乘问题,然后求解这个环形矩阵连乘积所需的最大乘法次数。对于石子合并问题,分析出它与矩阵连乘问题的相似性,从而借鉴矩阵连乘问题的求解方法实现求解。通过这两个问题的求解,有助于学生举一反三,启发学生思维,以学致用,提高问题求解能力。关键词:矩阵连乘问题;能量项链问题;石子合并问题中图分类号:G642.0 文献标志码:A 文章编号:1674-9324(2016)18-0206-03在算法分析与设计课程中,矩阵连乘问题[1-2]是一个可用动态规划方法求解的经典最优化问题,利用该问题可以有效地求解许多实际问题。该问题描述为:给定n个矩阵A1,A2,…,An,其中矩阵Ai(1≤i≤n)的维数为pi×pi+1,即矩阵A1的维数为p1×p2,矩阵A2的维数为p2×p3,依此类推,矩阵An的维数为pn×pn+1。考虑这n个矩阵的连乘积A1A2…An,由于矩阵乘法满足结合律,所以求解这个矩阵连乘积时可以有许多不同的计算次序,每种计算次序都有一个计算量,这里所说的计算量是指按照某种计算次序来计算一个矩阵连乘积时所需的乘法次数。那么矩阵连乘问题就是要确定一个矩阵连乘积的一种最优计算次序,使得按照这种最优计算次序来计算一个矩阵连乘积时,所需要的乘法次数最少。一、矩阵连乘问题的动态规划算法用记号A[i:j]来表示矩阵连乘积AiAi+1…Aj-1Aj。定义一个二维数组m来保存求解一个矩阵连乘积时所需的最少乘法次数,数组元素m[i][j]保存的是求解矩阵连乘积A[i:j]时所需的最少乘法次数。根据最优子结构性质,容易建立m[i][j]所满足的递推关系式如下。}}二、利用矩阵连乘问题求解能量项链问题(一)能量项链问题描述能量项链问题[3]是NOIP2006提高组复赛试题中的一道题目,该问题描述如下。在火星上,每个火星人都随身佩带着一串能量项链。在项链上有N颗能量珠,能量珠是一颗有头标记与尾标记的珠子,这些标记对应着某个正整数。对于相邻的两颗珠子而言,前一颗珠子的尾标记一定等于后一颗珠子的头标记。因为只有这样,通过吸盘(吸盘是火星人吸收能量的一种器官)的作用,这两颗珠子才能聚合成一颗珠子,同时释放出可以被吸盘吸收的能量。如果前一颗能量珠的头标记为m,尾标记为r,后一颗能量珠的头标记为r,尾标记为n,则这两颗能量珠聚合后释放的能量为m×r×n,新产生的珠子的头标记为m,尾标记为n。例如:设N=4,4颗珠子的头标记与尾标记依次为(2,3),(3,5),(5,10),(10,2)。用记号?表示两颗珠子的聚合操作,(j?k)表示第j,k两颗珠子聚合后所释放的能量,则第4、1两颗珠子聚合后释放的能量为:(4?1)=10×2×3=60,这两颗能量珠聚合后得到的新能量珠的头尾标记为(10,3)。4颗珠子聚合成一颗珠子时有许多不同的聚合次序,每种聚合次序对应了一个能量值,4颗珠子聚合时的一种最优聚合顺序以及所释放的最大能量为:((4?1)?2)?3)=10×2×3+10×3×5+10×5×10=710。对于由n颗珠子构成的能量项链,已知每颗珠子的首尾标记,要求确定这n颗珠子聚合成一颗珠子的一种最优聚合次序,使得释放的总能量最大,最终输出最大能量值。(二)能量项链问题求解算法由能量项链问题描述可看出,该问题与矩阵连乘问题十分相似,可看成一个由n个矩阵构成的环形矩阵连乘问题,就是要确定这n个矩阵构成的环形矩阵连乘积的一种最优计算次序,使得按照这种最优计算次序来计算这个环形矩阵连乘积时,所需的乘法次数达到最大。将matrix算法的if语句中的“”,即可实现求解一个直线矩阵连乘积的最大乘法次数了。在文献[3]中采用扩充方法求解了环形矩阵连乘问题,本文则采用枚举法来直接求解环形矩阵连乘问题,更直接也更容易理解。在n个矩阵直线相乘时,第n个矩阵和第1个矩阵是不相邻的,即这两个矩阵是不能相乘的。而当这n个矩阵环形相乘时,第n个矩阵和第1个矩阵是相邻的,这两个矩阵是可以相乘的,这种相邻性的改变使问题变得复杂了。在n个矩阵直线相乘时,长度为n的矩阵连乘积只有几种啊,只有一种,就是A1A2…An,而当n个矩阵环形相乘时,长度为n的矩阵连乘积又有几种呢?这时就有n种,分别是:A1A2A3…An-2An-1An,A2A3A4…An-1AnA1,A3A4A5…AnA1A2,依此类推,最后一种是AnA1A2…An-3An-2An-1。因此,可以采用枚举法来求n个矩阵构成的环形矩阵连乘问题,思路就是枚举n个矩阵环形相乘时所对应的每一种长度为n的n个矩阵直线相乘的情况,对每一种n个矩阵直线

文档评论(0)

guan_son + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档