求矩阵连乘的数乘次数~~~~~~~~~~~~~~~~~~~~~~~~~~~
4个矩阵的维数分别是
A=50*10 B=10*40 C=40*30 D=30*5
求:(A((BC)D))的数乘次数是多少?
[解决办法]
方阵相乘的复杂度是O(n^3),BC需要10*40*30次乘法得到一个10*30的矩阵B',A*B'需要50*10*30次乘法得到一个50*30的矩阵B'',B''*D需要50*30*5次乘法得到一个50*5的矩阵,共需要10*40*30*50*10*30*50*30*5次乘法。
[解决办法]
利用公式
m[i,j] = 0, i=j
= m[i,k] + m[k+1,j] + p[i-1]p[k]p[j], i<j, i<=k<j
int[] p = {50, 10, 40, 30, 5);
m[1,4]
= m[1,1] + m[2,4] + p[0]*p[1]*p[4] k=1
= 0 + (m[2,3] + m[4,4] + p[1]*p[3]*p[4]) + p[0]*p[1]*p[4] k=3
= m[2,2]+m[3,3] + p[1]*p[2]*[3] + p[1]*p[3]*p[4] + p[0]*p[1]*p[4]
= 10*40*30 + 10*30*5 + 50*10*5
= 16000
[解决办法]
应该就是这个问题吧?
http://www.51nod.com/question/index.html#!questionId=110
[解决办法]
这种矩阵相乘应该有专门的研究,毕竟最后结果是个50*5矩阵,每个都能用4个矩阵元素的加减乘法表达出来,而这些公式中又有许多重合的计算,这些计算能用动态规划法预先算出来,也许游戏引擎的算法书会有,或者专有的数学库,c++ template 表达式模板也能有所启发。