是否可以在恒定时间内获得一个数组。如果是的话,方法是什么。最好是在python中。
答案 0 :(得分:0)
让数组的大小为n
。构造一小部分n
的切片需要O(n)
次。在this related post中解释了python表示法。您也可以查看python documentation on the time complexities。所以答案一般不是,只有恒定大小的切片才能是恒定时间。
答案 1 :(得分:0)
这是可能的,我不知道为什么人们的说法不同。你只需要编写自己的类来做到这一点,并注意可变性。基本上,您需要实现与列表相同的接口,但要注意处理切片的方式。
您可以创建一个名为 SliceList
的类,它是可迭代的,并在内部存储一个列表和两个偏移量到该列表 start
和 end
中。您可以重载 []
运算符,以便 x[i]
真正访问 x.internal_list[x.start + i]
。您还可以重载 __len__
以返回 end - start
。最大的问题是您将拥有内部数据结构的浅表副本,因此对原始列表的修改也会修改列表的任何切片。但这确实使某些算法(例如二分搜索算法)的代码更清晰,因为数据结构将处理内部索引数学,而您必须显式传递所有这些。
切片然后返回一个新的 SliceList
对象,具有相同的内部列表,但不同的开始和结束。切片现在是 O(1)。