0
我有N個方形矩陣,所有相同大小的MxM都必須複製到包含NxN矩陣的矩陣中,以對稱方式排列。上半部分和下半部分包含像這種方案中相同矩陣的轉置版本。在大矩陣中複製瓷磚的高效算法
N = 4
m1 m2 m3 m4
m2'm1 m2 m3
m3'm2'm1 m2
m4'm3'm2'm1
產生數據最初填充只在上排和第一列,留下其餘的空的算法。
m1 m2 m3 m4
m2'0 0 0
m3'0 0 0
m4'0 0 0
我想找到一個有效的索引方案,以填補所有這一切已經被填充線的元素開始大矩陣。請記住,m1 ... mn是MxM大小的矩形矩陣,並且該矩陣按列主要順序排列。矩陣不是那麼大,所以不需要利用很多地方和緩存相關的東西。
平凡算法如下所示,其中X是矩陣。
int toX = 0, fromX = 0, toY = 0, fromY = 0;
for (int i = 1; i < N; ++i) {
for (int j = 1; j < N; ++j) {
for (int ii = 0; ii < M; ++ii) {
for (int jj = 0; jj < M; ++jj) {
fromX = (i - 1) * dim + ii;
fromY = (j - 1) * dim + jj;
toX = i * dim + ii;
toY = j * dim + jj;
X(toX, toY) = X(fromX, fromY);
}
}
}
}
你能找到更好的方法嗎?
大矩陣將充滿了從較小的矩陣拍攝元素其中前幾列將包含按行主排列的第一個矩陣的所有元素,這是我的理解正確? – 2011-02-17 11:05:33