矩阵连乘问题《算法分析与设计》.doc





《矩阵连乘问题《算法分析与设计》.doc》由会员分享,可在线阅读,更多相关《矩阵连乘问题《算法分析与设计》.doc(8页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、设计性实验报告 课程名称:算法分析与设计实验题目:矩阵连乘问题组 长:成 员 一:成 员 二:成 员 三:系 别:数学与计算机科学系专业班级:指导教师:实验日期: 一、实验目的和要求实验目的熟悉动态规划算法设计思想和设计步骤,掌握基本的程序设计方法,培养学生用计算机解决实际问题的能力。实验要求1、根据实验内容,认真编写源程序代码、上机调试程序,书写实验报告。2、本实验项目考察学生对教材中核心知识的掌握程度和解决实际问题的能力。3、实验项目可以采用集中与分散实验相结合的方式进行,学生利用平时实验课时间和课外时间进行实验,要求在学期末形成完整的项目程序设计报告。二、实验内容提要矩阵连乘问题给定n个
2、矩阵A1,A2,An, 其中,Ai与Ai+1是可乘的,i=1,2,n-1。考查这n个矩阵的连乘积A1,A2,An。由于矩阵乘法满足结合律,故计算矩阵的连乘积可以有许多不同的计算次序。这种计算次序可以用加括号的方式来确定。若一个矩阵连乘积的计算次序完全确定,也就是说该连乘积已完全加括号,则可以依此次序反复调用2个矩阵相乘的标准算法计算出矩阵连乘积。完全加括号的矩阵连乘积可递归地定义为:(1)单个矩阵是完全加括号的;(2)矩阵连乘积A是完全加括号的,则A可表示为2个完全加括号的矩阵连乘积B和C的乘积并加括号,即A=(BC)。三、实验步骤下面考虑矩阵连乘积的最优计算次序问题的动态规划方法。(1)分析
3、最优解的结构(最优子结构性质) 设计求解具体问题的动态规划算法的第一步是刻画该问题的最优解结构特征。对于矩阵乘积的最优计算次序问题也不例外。首先,为方便起见,降矩阵乘积Ai Ai+1Aj简记为Ai:j。考查计算A1:n的最优计算次序。设这个计算次序在矩阵Ak和Ak+1之间将矩阵链断开,1=kn,则其相应的完全加括号方式为(A1Ak)(Ak+1An)即依此次序,先计算A1:k和 Ak+1:n,然后将计算结果相乘得到A1:n。依此计算次序,总计算量为A1:k的计算量加上Ak+1:n的计算量,再加上A1:k和Ak+1:n相乘的计算量。这个问题的一个关键特征是:计算A1:n的最优次序所包含的计算矩阵子
4、链A1:k和Ak+1:n的次序也是最优的。事实上,若有一个计算A1:k的次序需要的计算量更少,则用此次序替换原来计算A1:k的次序,得到的计算A1:n的计算量将比按最优次序计算所需计算量更少,这是一个矛盾。同理可知,计算A1:n的最优次序所包含的计算矩阵子链Ak+1:n的次序也是最优的。因此,矩阵连乘积计算次序问题的最优解包含着其子问题的最优解。这种性质称为最优子结构性质。问题的最优子结构性质是该问题可用动态规划算法求解的显著特征。(2)建立递归关系对于矩阵连乘积的最优计算次序问题,设计算Ai:j,1=i=n,所需的最少数乘次数为mij,则原问题的最优值为吗m1n。当i=j时,Ai:j=Ai为
5、单一矩阵,无需计算,因此,mii=0,i=1,2,.,n 。当ij时,可利用最优子结构性质计算mij。事实上,若计算Ai:j的最优次序在Ak和Ak+1之间断开,i=kj,则mij=mik+mk+1j+pi-1*pk*pj。由于在计算时并不知道断开点k的位置,所以k还未定。不过k的位置只有j-i种可能,即k属于i,i+1,.,j-1。因此,k是这j-i个位置中使计算量达到最小的那个位置。从而mij可以递归地定义为当i=j,mij=0;当ij,mij=minmik+mk+1j+pi-1*pk*pj,i=kjmij给出了最优值,即计算Ai:j所需的最少数乘次数。同时还确定了计算Ai:j的最优次序中的
6、断开位置k,也就是说,对于这个k有mij=mik+mk+1j+pi-1*pk*pj若将对应于mij的断开位置k记为sij,在计算出最优值mij后,可递归地有sij构造出相应的最优解。(3)计算最优值根据计算mij的递归式,容易写一个递归算法计算min。.稍后将看到,简单的递归计算将耗费指数计算时间。注意到在递归计算过程中,不同的子问题个数只有(n2)个。事实上,对于1=i=j=n不同的有序对(i,j)对应于不同的子问题。因此,不同的子问题的个数最多只有n*(n-1)/2+n=(n2)个。由此可见,在递归计算时,许多子问题被重复计算多次。这也是该问题可以动态规划算法求解的又一显著特征。用动态规划
7、算法解此问题,可依据其递归式以自底向上的方式进行计算。在计算过程中,保存已解决的子问题答案。每个子问题只计算一次,而在后面计算时只需简单查一下,从而避免大量重复计算,最终得到多项式时间的算法。下面给出的动态规划算法matrixChain中,输入参数p0,p1,p2.,pn存储于数组p中。算法除了输出最优值数组m外还输出记录最优断开位置的数组s。算法matrixChain,首先计算出mii=0,i=1,2,.,n。然后,根据递归式,按矩阵链长递增的方式依次计算mii+1,i=1,2,.,n-1,(矩阵链长度为2);mii+2,i=1,2,.n-2,(矩阵链长为3);.。在计算mij时,只用到已计
8、算出的mik和mk+1j。(4)构造最优解动态规划算法的第四步屎构造问题的最优解。算法matrixChain只是计算出了最优值,并未给出最优解。也就是说,通过算法matrixChain的计算,只知道最少数乘次数,还不知道具体应按什么次序做矩阵乘法才能达到最少的数乘次数。事实上,算法matrixChain已记录了构造最优解所需要的全部信息。Sij中的数k表明计算矩阵链Ai:j的最佳方式应在矩阵Ak和Ak+1之间断开,即最优的加括号方式应为(Ai:k)(Ak+1:j)。因此,从是1n记录的信息可知计算A1:n的最优加括号方式为(A1:s1n)(As1n+1:n).而A1:s1n的最优加括号方式为(
9、A1:s1s1n)(As1s1n+1:s1s1n).同理可知确定As1n+1:n的最优加括号方式为是ss1n+1n出断开,照此递推下去,最终可以确定A1:n的最优完全加括号方式,即构造出问题的一个最优解。下面的算法traceback按算法matrixChain计算出的断点矩阵s指示的加括号方式输出计算Ai:j的最优计算次序。void traceback (int i,int j,int sN+1)/用递归来实现输出得到最小数乘次数的表达式if (i=j)printf (A%d,i);elseprintf (); traceback (i,sij,s); traceback(sij+1,j,s)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 算法分析与设计 矩阵 问题 算法 分析 设计

限制150内