32、矩阵乘法满足结合律,所以计算矩阵连乘,不同的计算次序计算量相同。
第1题:
A、计算邻接矩阵中第i行的元素之和
B、计算邻接矩阵中第i列的元素之和
C、计算邻接矩阵中第i行的非零元个数
D、计算邻接矩阵中第i列的非零元个数
第2题:
试题四(15分)
阅读下列说明和C代码,回答问题1至问题3,将解答写在答题纸的对应栏内。
【说明】
某工程计算中要完成多个矩阵相乘(链乘)的计算任务。
两个矩阵相乘要求第一个矩阵的列数等于第二个矩阵的行数,计算量主要由进行乘法运算的次数决定。采用标准的矩阵相乘算法,计算Am*n*Bn*p,需要m*n*p次乘法运算。
矩阵相乘满足结合律,多个矩阵相乘,不同的计算顺序会产生不同的计算量。以矩阵A110*100,A2100*5,A35*50三个矩阵相乘为例,若按(A1*A2)*A3计算,则需要进行10*100*5+10*5*50=7500次乘法运算;若按A1*(A2*A3)计算,则需要进行100*5*50+10*100*50=75000次乘法运算。可见不同的计算顺序对计算量有很大的影响。
矩阵链乘问题可描述为:给定n个矩阵<A1,A2,….An>,矩阵Ai的维数为pi-1*Pi,其中i = 1,2,….n。确定一种乘法顺序,使得这n个矩阵相乘时进行乘法的运算次数最少。
由于可能的计算顺序数量非常庞大,对较大的n,用蛮力法确定计算顺序是不实际的。经过对问题进行分析,发现矩阵链乘问题具有最优子结构,即若A1*A2*…*An的一个最优计算顺序从第k个矩阵处断开,即分为A1*A2*….Ak和Ak+1*Ak+2*…*An两个子问题,则该最优解应该包含A1*A2*…*Ak的一个最优计算顺序和Ak+1*Ak+2*…An的一个最优计算顺序。据此构造递归式,
其中,cost[i][j]表示Ai+1*Ai+2*...Aj+1的最优计算的计算代价。最终需要求解cost[0][n-1]。
【C代码】
算法实现采用自底向上的计算过程。首先计算两个矩阵相乘的计算量,然后依次计算3个矩阵、4个矩阵、…、n个矩阵相乘的最小计算量及最优计算顺序。下面是算法的C语言实现。
(1)主要变量说明
n:矩阵数
seq[]:矩阵维数序列
cost[][]:二维数组,长度为n*n,其中元素cost[i][j]表示Ai+1*Ai+2*…Aj+1的最优计算的计算代价
trace[][]:二维数组,长度为n*n,其中元素trace[i][j]表示Ai+1*Ai+2*Aj+1的最优计算对应的划分位置,即k
(2)函数cmm
define N 100
intcost[N][N];
inttrace[N][N];
int cmm(int n,int seq[]){
int tempCost;
int tempTrace;
int i,j,k,p;
int temp;
for( i=0;i<n;i++){ cost[i][i] =0;}
for(p=1;p<n;p++){
for(i=0; (1) ;i++){
(2);
tempCost = -1;
for(k = i;k<j;k++){
temp = (3) ;
if(tempCost==-1||tempCost>temp){
tempCost = temp;
(4) ;
}
}
cost[i][j] = tempCost;
trace[i][j] = tempTrace;
}
}
return cost[0][n-1];
}
【问题1】(8分)
根据以上说明和C代码,填充C代码中的空(1)~(4)。
【问题2】(4分)
根据以上说明和C代码,该问题采用了 (5) 算法设计策略,时间复杂度 (6) 。(用O符号表示)
【问题3】(3分)
考虑实例n=6,各个矩阵的维数:A1为5*10,A2为10*3,A3为3*12,A4为12*5,A5为5*50,A6为50*6,即维数序列为5,10,3,12,5,50,6。则根据上述C代码得到的一个最优计算顺序为 (7) (用加括号方式表示计算顺序),所需要的乘法运算次数为 (8) 。
试题四分析
在解答本题时,需要注意的第一个问题便是矩阵的乘法到底是怎么进行的。
一个n行m列的矩阵可以乘以一个m行p列的矩阵,得到的结果是一个n行p列的矩阵,其中的第i行第j列位置上的数等于前一个矩阵第i行上的m个数与后一个矩阵第j列上的m个数对应相乘后所有m个乘积的和。如:
在本题中,题干部分提到“发现矩阵链乘问题具有最优子结构”,这是利用动态规划法求解最优解问题的典型特征。所以(5)应填动态规划法。
接下来分析(1)-(4)空,这几个空中,最容易回答的是(3)和(4)。(3)空可通过题目给出的递归式分析得到,其中cost数组部分与公式完全一致,而p数组在程序中是seq,所以回答时修正即可,(3)填:cost[i][k]+cost[k+1][j]+seq[i]*seq[k+1]*seq[j+1]。第(4)空的上一句为:tempCost = temp,即保存当前状态最优解,由于在保存最优解时,不仅涉及cost的记录,还涉及其位置k的记录,所以需要在此进行tempTrace=k的操作。
(1)与(2)相对复杂,其中(1)是对i值范围的确定,而(2)是对j的赋值操作(由于后面用到了j,但程序中没有对j的赋值,从而断定该空是对j的赋值)。两者一并起到一个效果,对cost数组操作时的操作范围与顺序。由于在进行矩阵链乘操作时,分析解空间所用到的是cost右上角的三角矩阵,而操作时,是对这个三角矩阵从左至右,呈斜线的访问(如图所示)。所以(1)和(2)分别填i<n-p和j=i+p。
该程序由于涉及3重循环,所以时间复杂度为:O(n3)。通过手动运行程序的方式可知最优解为:
(A1A2)((A3A4)(A5A6))。
总计算次数为2010。
参考答案
【问题1】
(1)i<n-p
(2)j=i+p
(3)cost[i][k]+cost[k+1][j]+seq[i]*seq[k+1]*seq[j+1]
(4)tempTrace=k
【问题2】
(5)动态规划法 (6)O(n3)
【问题3】
(7)(A1A2)((A3A4)(A5A6)) (8)2010
第3题:
第4题:
第5题:
第6题:
第7题:
矩阵的乘法规则不满足传统的乘法交换律。
第8题:
定额中遇有两个或两个以上系数时,按()计算。
第9题:
创建一个4阶魔术矩阵A与单位矩阵B,并分别计算两矩阵之和、矩阵相乘、矩阵点乘、A矩阵乘方、A矩阵装置。
第10题:
能用乘法结合律计算的式子是()。
第11题:
矩阵乘法不满交换律也不满足结合律。
第12题:
对
错
第13题:
关于CT机矩阵的叙述,不正确的是
A.相同扫描野中矩阵越大,计算机工作量越大
B.相同扫描野中矩阵越大,图像分辨率越高
C.相同采样野矩阵越大有效野越大
D.是纵横二维排列的单位容积和像素
E.也是衰减系数的矩阵
第14题:
两个矩阵Am*n和Bn*p相乘,用基本的方法进行,则需要的乘法次数为m*n*p 多个矩阵相乘满足结合律,不同的乘法顺序所需要的乘法次数不同。考虑采用动态规划方法确定Mi,M{i+i),…,Mj多个矩阵连乘的最优顺序,即所需要的乘法次数最少。最少乘法次数用m[i,j]表示,其递归式定义为:其中i、j和k为矩阵下标,矩阵序列中Mi的维度为(Pi-i.)*Pi采用自底向上的方法:实现该算法来确定n个矩阵相乘的顺序,其时间复杂度为( 64 )。若四个矩阵M1. M2、M3.,M4相乘的维度序列为2、6、3、10.3,采用上述算法求解,则乘法次数为( 65 )。
A.O(N2)
B.O(N2Lgn)
C.O(N3)
D.O(n3lgn)
第15题:
第16题:
第17题:
第18题:
潮流计算是以导纳矩阵为计算基础的。
第19题:
矩阵乘法有一个奇特的性质:不符合传统乘法的()。
第20题:
矩阵的组合特性是矩阵乘法满足结合率,不满足交换率,即进行连续变换时一定要按变换次序对变换矩阵求积后才得到总的变换矩阵。
第21题:
使用连乘法计算,如果结果大于1,则证明存在可套利的路径。
第22题:
矩阵的乘法不满足哪一规律?()
第23题:
对
错
第24题:
结合律
分配律
交换律
都不满足