我有一個環繞的矩陣。快速訪問包裝在二維矩陣中的單元格
m_matrixOffset指向纏繞矩陣的第一個單元(0,0)。因此,要訪問一個單元格,我們在GetCellInMatrix.Logic函數的下面執行環繞操作(在while循環中),每次有人訪問單元格時都會執行該操作。這是在一秒鐘內執行數千次。有沒有什麼方法可以使用某種查找或其他方式來優化它。 MAX_ROWS和MAX_COLS未必是2
struct Cell
{
Int rowId;
Int colId;
}
int matData[MAX_ROWS][MAX_COLS];
int GetCellInMatrix(const Cell& cellIndex)
{
Cell newCellIndex = cellIndex + m_matrixOffset ;
while (newCellIndex.rowId > MAX_ROWS)
{
newCellIndex.rowId -= MAX_ROWS;
}
while (newCellIndex.colId > MX_COLS)
{
newCellIndex.y -= MAX_COLS;
}
return data[newCellIndex.rowId][newCellIndex.colId];
}
我們之前就是這麼做的,但是這導致了性能問題,因爲這對CPU來說代價很高。由於我們訪問單元數千甚至數百萬次,因此它不是最佳的 – Poorna
然後,您需要驗證resp。量化矩陣偏移量。如果你可以保證矩陣偏移量也小於矩陣維數(通過計算餘數一次),你有最大值。一個減少,並可以用'if'來代替'while',從而減少一個比較的工作量。 – LutzL