在 Lua 中,这在计算上是最便宜的:一个矩阵,其中在(行,列)找到的项位于matrix[row][column]
或{{1} }?
假定将对这些项目进行读写操作,并假设矩阵大在大约1000乘2000个项目中。
我主要关心的是当前效率,而不是开销。
答案 0 :(得分:3)
如下所示,matrix[row][column]
使用的VM指令比matrix[row + numberOfRows * column]
少。但是,尚不清楚一个GETTABLE
是否比MUL+ADD
快。
唯一的真实答案是:测量两个选择。
$ cat 1
local matrix,row,numberOfRows,column
return matrix[row][column]
$ luac -l 1
main <1:0,0> (5 instructions at 0x7f9459c03d40)
0+ params, 5 slots, 1 upvalue, 4 locals, 0 constants, 0 functions
1 [1] LOADNIL 0 3
2 [2] GETTABLE 4 0 1
3 [2] GETTABLE 4 4 3
4 [2] RETURN 4 2
5 [2] RETURN 0 1
$ cat 2
local matrix,row,numberOfRows,column
return matrix[row + numberOfRows * column]
$ luac -l 2
main <2:0,0> (6 instructions at 0x7ff339c03d40)
0+ params, 5 slots, 1 upvalue, 4 locals, 0 constants, 0 functions
1 [1] LOADNIL 0 3
2 [2] MUL 4 2 3
3 [2] ADD 4 1 4
4 [2] GETTABLE 4 0 4
5 [2] RETURN 4 2
6 [2] RETURN 0 1
但是,这样的循环
for row=1,numberOfRows do
for column=1,numberOfColumns do
matrix[row][column]=f(row,column)
end
end
可能比这慢
for row=1,numberOfRows do
local r=matrix[row]
for column=1,numberOfColumns do
r[column]=f(row,column)
end
end
再次测量两个选择。