采用递归方式实现,MATLAB函数如下:
function C=strass(A,B,n,n_min)
if n<=n_min
C=A*B;
else
m=n/2;
u=1:m;
v=m+1:n;
P1=strass(A(u,u)+A(v,v),B(u,u)+B(v,v),m,n_min);
P2=strass(A(v,u)+A(v,v),B(u,u),m,n_min);
P3=strass(A(u,u),B(u,v)-B(v,v),m,n_min);
P4=strass(A(v,v),B(v,u)-B(u,u),m,n_min);
P5=strass(A(u,u)+A(u,v),B(v,v),m,n_min);
P6=strass(A(v,u)-A(u,u),B(u,u)+B(u,v),m,n_min);
P7=strass(A(u,v)-A(v,v),B(v,u)+B(v,v),m,n_min);
C(u,u)=P1+P4+P7-P5;
C(u,v)=P3+P5;
C(v,u)=P2+P4;
C(v,v)=P1+P3+P6-P2;
end
end
理论上来讲,该算法比传统的算法效率会提高一些,相对于传统算法的O(n^3),该算法为O(n^2.807),但是如果用程序实现,会比传统方法更耗时,因为大量采用递归会造成性能的显著下降。
评论