为什么在Lua中使用带有表删除/插入的大队列会效率低下?

虽然我们可以使用插入和删除(来自表库)的方法轻松地实现队列,但这种实现对于大型结构来说可能过于缓慢。一种更有效的实现方法是使用两个索引,一个用于第一个元素,另一个用于最后一个元素...

这是因为重新索引吗?还是因为它对于大型结构来说存在其他原因导致效率低下?

点赞
用户841803
用户841803

我在书的后面找到了答案:http://www.lua.org/pil/19.2.html

……从数组的给定位置删除(并返回)一个元素,将其他元素向下移动以关闭空间并减小数组的大小。

要在结构的另一端插入,我们使用table.insert(a,1,x);要从另一端删除,我们使用table.remove(a,1)。后两个操作并不特别高效,因为它们必须跨元素移动。然而,由于tabl库在C中实现了这些函数,因此这些循环不会太昂贵,这种实现对于小数组(比如一百个元素以内)而言足以胜任。

2013-08-08 19:06:06