有这样的一个题目:
对任何非零偶数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的子矩阵了,那不是等于没分?所以出现这两个问题我实在是做不下去!请高手指教!