【发布时间】:2016-02-16 19:57:11
【问题描述】:
我对 c++ 相当陌生,并且正在尝试编写 strassen 算法来乘以矩阵。部分算法要求我将矩阵划分为四个部分,例如
4 5 6 7
6 7 8 9
1 2 3 4
2 3 5 6
分区:
4 5 6 7
6 7 8 9
1 2 3 4
2 3 5 6
(然后每个部分再次递归使用和分区)。我想在不循环和复制原始矩阵中的数据的情况下对矩阵进行分区(因为这将花费更多时间)。我正在阅读的书说矩阵使用'索引计算进行分区,通过原始矩阵的一系列行索引和一系列列索引识别子矩阵。我不确定这是什么意思。
另外,我不确定我应该使用二维数组还是向量?我见过很多人推荐向量,但到目前为止我已经在二维数组中编写了所有内容,所以我希望二维数组可以实现我想要的。
p.s 可以假设矩阵的维度将始终是 2 的幂并且是 nxn(正方形)。另外,我看到了很多与此类似的问题,但实际上都没有我正在寻找的解决方案。
谢谢
【问题讨论】:
-
循环是一种基本算法。尝试在不使用循环的情况下编写任何中等复杂性的代码,就像在不使用分号的情况下编写代码一样。循环的唯一替代方法是通过编写大量重复的意大利面条代码,手动将每个值从源矩阵移动到适当的目标矩阵的位置,来为已知固定大小的矩阵实现此过程。如果你的书告诉你不要使用循环,找另一本书学习。
标签: c++ arrays matrix partitioning sub-array