【发布时间】:2009-09-25 17:56:32
【问题描述】:
有谁知道右循环移动矩阵的有效方法?顺便说一句,矩阵是二进制的,但解决非二进制矩阵的方法也可以。
现在,我正在考虑为矩阵的行实现一个循环数组,并在需要移位操作时更新每一行。
我正在考虑的另一种方法是实现一个指向由向量表示的(矩阵的)列的指针向量,并在发生移位操作时交换它们。
例如
1 2 3
4 5 6
7 8 9
右移
3 1 2
6 4 5
9 7 8
如果我还需要将矩阵向下移动,那么所有这些解决方案都会出现另一个问题。要有效地执行这两个操作,完全超出了我的能力范围。
降档
9 7 8
3 1 2
6 4 5
【问题讨论】:
-
定义位矩阵。矩阵是如何表示的?例如,对尺寸有什么要求?固定的?动态的?等等等等等等。将序列向左或向右旋转只是循环序列并在某个临时变量中记住一个值的问题。
-
矩阵可以用任何形式表示。存储的数据将是布尔值。每个矩阵的大小范围可以从大约 300x300 到 1000x1000(不一定是正方形)。是的,就是这样。但是,如果我们交换指向列的指针而不是实际复制值,如果我们向左或向右旋转它会更有效。
-
您可以简单地编写一个用于存储支持快速旋转的矩阵的类,而不是实际移动/复制数据。参见 std::deque 例如: tmp = deque.front(); deque.pop_front(); deque.push_back(tmp);全部在 O(1) 内完成
-
谢谢,抱歉没提,但我以后需要随机访问矩阵,而 deque 不支持。是的,也许我可以稍后将它复制到向量数组中。
-
deque 只是与您想要的类似的一个例子。顺便说一句:它确实支持快速随机访问。
标签: c++ stl matrix visual-c++-2005 shift