我在使用分治矩阵乘法时遇到了困难。据我所知,您需要将大小为nxn的矩阵分成四个象限(每个象限为n/2),然后进行以下操作:
C11 = A11⋅ B11 + A12 ⋅ B21
C12 = A11⋅ B12 + A12 ⋅ B22
C21 = A21 ⋅ B11 + A22 ⋅ B21
C22 = A21 ⋅ B12 + A22 ⋅ B22
我的分治算法输出结果非常大,我很难弄清楚问题所在,因为我不太擅长递归。
示例输出:
原始矩阵 A:
4 0 4 3
5 4 0 4
4 0 4 0
4 1 1 1
A x A
Classical:
44 3 35 15
56 20 24 35
32 0 32 12
29 5 21 17
分而治之:
992 24 632 408
1600 272 720 1232
512 0 512 384
460 17 405 497
有人能告诉我在分治算法中我做错了什么吗?我的所有矩阵都是int[][]
类型的,经典方法是传统的三重循环矩阵乘法。