在线请懂得strassen乘法的高手进来帮忙分析一下问题

linda2 2003-10-16 01:36:27
有这样的一个题目:
对任何非零偶数n,总可以找到一个奇数m和一个正整数k,使得 n=m2^k(k是幂)。
为了求两个n阶矩阵的乘积,可以把一个n阶矩阵分成m×m个子矩阵,每个子矩阵有
2^k×2^k 个元素。当需要求2^k×2^k的子矩阵的积时,使用Strassen算法。设计一个传统方法与Strassen算法相结合的矩阵相乘的算法,对任何偶数n,都可以求出两个n阶矩阵的乘积。


题目就是这样,现在Strassen的算法我知道是
void STRASSEN(n,A,B,C)
{
if (n==2)
MATRIX-MULTIPLY(A,B,C);
else
{
STRASSEN(n/2,A11,B12-B22,M1);
STRASSEN(n/2,A11+A12,B22,M2);
STRASSEN(n/2,A21+A22,B11,M3);
STRASSEN(n/2,A22,B21-B11,M4);
STRASSEN(n/2,A11+A22,B11+B22,M5);
STRASSEN(n/2,A12-A22,B21+B22,M6);
STRASSEN(n/2,A11-A21,B11+B12,M7);
Merge(C);//这部合并就简写了!
}
}
问题(1)按上面的程序来看的话如果n是8阶的话没有问题,但是如果是12阶的话那就是必须分解到n/2=6,(n/2)/2=3, ((n/2)/2)/2=1永远都不会有2出来这样就死递归了哦,所以我觉得可能这个算法不是通用算法吧!大家怎样看?
问题(2)按上面的题目来看的话我想他的分解是用来解决问题(1)不会出现2的问题吧
但是一看!当n=8阶的话,那2的三次方就是8了,而且m要是奇数,所以m只能是1,那不是就是说将8阶的矩阵分成m×m既是1×1的子矩阵了,那不是等于没分?所以出现这两个问题我实在是做不下去!请高手指教!

...全文
465 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhouqingyuan 2003-10-16
  • 打赏
  • 举报
回复
up

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧