什么是Tcl lindex复杂度的顺序?

时间:2015-10-26 17:24:46

标签: list tcl time-complexity

我的印象是Tcl看着它的''当使用lindex时,数据作为列表而不是数组。
因此,搜索第n个元素的顺序是O(n),因为"一切都是字符串"。我在经验上找到了几个我无法分享的测试用例,但事实并非如此。 lindex更接近于O(log(n)),甚至比那更复杂!。这是有意的,还是"纯粹的运气"?

1 个答案:

答案 0 :(得分:4)

Tcl列表是引擎盖下的C数组,因此您应该看到O(1)用于索引访问。 Tcl中没有内置的链表结构(仅限扩展名)。

如果存在闪烁,您可能会看到更高的复杂性(例如,当您有一个字符串表示需要在内部转换并在使用之前解析为列表时)。对于没有字符串表示的纯列表(就像从[list 1 2 3]获得的那些,它应该是O(1)。

这有一个历史维度。如果您使用像Tcl 7这样的古老Tcl,它不会在内部对象中缓存列表,但会对字符串表示进行重新分析,您将看到项目访问的预期O(N)性能。但是对于任何在内部使用Tcl_Obj的现代Tcl,情况就不再如此(除非你一直闪烁到字符串和字符串中)。