[英]Swap rows or columns of a 2d array in O(1) time in c++
我的問題是,如何在O(1)時間內交換2D數組的兩行或兩列?,我在互聯網上搜索時發現了memcpy函數,但我不知道如何使用它。 例如
給定一個矩陣:
1 2 3
4 5 6
7 8 9
如果我們交換第1行和第2行
4 5 6
1 2 3
7 8 9
您可以在行和列上都使用間接數組。 換句話說,使用元素i,j
data[rowix[i]][colix[j]]
而不是簡單
data[i][j]
這仍然是元素訪問的O(1)(盡管具有較大的常量因子),但也允許您在常量時間內交換行和列(只需交換索引數組元素)。
在C ++中
template<int ROWS, int COLS, typename T>
struct Mat2d {
T data[ROWS][COLS];
int colix[COLS], rowix[ROWS];
Mat2d() {
for (int i=0; i<ROWS; i++) {
for (int j=0; j<COLS; j++) {
data[i][j] = T();
}
}
for (int i=0; i<ROWS; i++) rowix[i] = i;
for (int j=0; j<COLS; j++) colix[j] = j;
}
T& operator()(int i, int j) { return data[rowix[i]][colix[j]]; }
T operator()(int i, int j) const { return data[rowix[i]][colix[j]]; }
void swapRows(int i1, int i2) { std::swap(rowix[i1], rowix[i2]); }
void swapCols(int j1, int j2) { std::swap(colix[j1], colix[j2]); }
};
編程中的每個問題都可以通過添加一個間接級別來解決(除非存在過多的間接級別);-)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.