是否有可能在恒定时间内得到一个数组?

时间:2017-07-24 08:16:25

标签: time-complexity slice

是否可以在恒定时间内获得一个数组。如果是的话,方法是什么。最好是在python中。

2 个答案:

答案 0 :(得分:0)

让数组的大小为n。构造一小部分n的切片需要O(n)次。在this related post中解释了python表示法。您也可以查看python documentation on the time complexities。所以答案一般不是,只有恒定大小的切片才能是恒定时间。

答案 1 :(得分:0)

这是可能的,我不知道为什么人们的说法不同。你只需要编写自己的类来做到这一点,并注意可变性。基本上,您需要实现与列表相同的接口,但要注意处理切片的方式。

您可以创建一个名为 SliceList 的类,它是可迭代的,并在内部存储一个列表和两个偏移量到该列表 startend 中。您可以重载 [] 运算符,以便 x[i] 真正访问 x.internal_list[x.start + i]。您还可以重载 __len__ 以返回 end - start。最大的问题是您将拥有内部数据结构的浅表副本,因此对原始列表的修改也会修改列表的任何切片。但这确实使某些算法(例如二分搜索算法)的代码更清晰,因为数据结构将处理内部索引数学,而您必须显式传递所有这些。

切片然后返回一个新的 SliceList 对象,具有相同的内部列表,但不同的开始和结束。切片现在是 O(1)。