【发布时间】:2011-06-18 07:56:32
【问题描述】:
我无法让分而治之的矩阵乘法工作。据我了解,您将大小为 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×A
经典:
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[][],经典方法是传统的3 for循环矩阵乘法
【问题讨论】:
-
为什么要这样做矩阵乘法?如果您对原始性能感兴趣,那么可以使用数字库,我相信它们会比您在合理时间内自己编写的更快。如果您有兴趣了解数值计算,我将从循环平铺(维基百科有一篇文章)开始,而不是递归解决方案。
标签: algorithm math matrix multiplication