java – 使用数组(2D)或1D数组来实现更有效的矩阵?

当使用数组实现Matrix构造时,这将更有效率?
使用1D阵列,或阵列阵列(2D)?

我会认为2D是更有效的,因为您已经拥有元素的X和Y坐标,在1D实现中,您必须计算索引.

编辑:它正在使用Java实现

最佳答案
“高效”不是一个全部的术语.

数组阵列解决方案在存储方面更为有效,其中数组可能稀疏(即,可以使用空指针来表示所有零的矩阵行).这将是(在C):

int *x[9];

其中每个“int *”将分别分配.

2D阵列(不一定是阵列阵列)通常会更快(在速度方面有效),因为它可以用数学方法解决存储器位置,而无需取消引用存储器位置.我在说这个结构:

int x[9][9];

形式的1D阵列:

int x[81];

不太可能比等效的2D版本更快,因为您仍然需要在某些时候进行计算以找到正确的单元格(手动在代码中,而不是让编译器执行此操作).

编辑之后添加Java的要求:

我相信Java 2D数组是数组的阵列(它将需要两个存储器访问而不是1D阵列所需的数组),因此具有手动索引计算的1D阵列可能会更快.所以,而不是声明和使用:

int x[width][height];
x[a][b] = 2;

您可以获得更多的速度:

int x[width*height];
x[a*height+b] = 2;

您只需要小心,不要在任何地方混合公式(即不要无意中交换4和7).

这种速度差异是基于我认为Java在封面下的编码,所以我可能是错的(但我怀疑:-).我的建议是,一如以往的优化问题,衡量,不要猜!

转载注明原文:java – 使用数组(2D)或1D数组来实现更有效的矩阵? - 代码日志