我有一个环绕的矩阵。快速访问包装在二维矩阵中的单元格
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