Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays LUA中阵列操作的时间复杂度_Arrays_Lua_Complexity Theory_Computercraft - Fatal编程技术网

Arrays LUA中阵列操作的时间复杂度

Arrays LUA中阵列操作的时间复杂度,arrays,lua,complexity-theory,computercraft,Arrays,Lua,Complexity Theory,Computercraft,我正在用ComputerCraft(用于Minecraft)发现Lua,我需要2个功能: 基数函数#foo(对于名为“foo”的给定表) 从表中弹出最后一个元素,例如:foo[#foo]=nil(有更好的吗?) 这些功能各自的复杂性是什么?我特别需要一个O(1)方法来弹出表的最后一个元素 抱歉英语不好,提前谢谢。#foo是O(n);它遍历able,直到找到nil,然后返回它前面的最后一个索引。将最后一个元素设置为nil确实是弹出的“正确”方式,因为nil是定义表长度的方式,除非您正在使用(在

我正在用ComputerCraft(用于Minecraft)发现Lua,我需要2个功能:

  • 基数函数#foo(对于名为“foo”的给定表)
  • 从表中弹出最后一个元素,例如:foo[#foo]=nil(有更好的吗?)
这些功能各自的复杂性是什么?我特别需要一个O(1)方法来弹出表的最后一个元素

抱歉英语不好,提前谢谢。

#foo
是O(n);它遍历able,直到找到
nil
,然后返回它前面的最后一个索引。将最后一个元素设置为nil确实是弹出的“正确”方式,因为
nil
是定义表长度的方式,除非您正在使用(在Lua5.1中被弃用,在Lua5.2中被删除)

使其为O(1)的正确方法是将长度存储在其他位置,并在每次向表中添加或从表中删除内容时对其进行更新。

根据(第3.4.7节),
#t
是对数的,而不是线性的。 它是从Lua5.3开始明确编写的,但Lua5.1和5.2中可能也是如此。它在卢阿吉特也是对数的

但正如上面的另一个答案中所说,如果希望长度为O(1),则需要手动保存长度记录。

\foo
是O(logn),而不是O(n)。