将collections.deque转换为python列表的算法复杂度是多少?

时间:2018-09-18 20:49:07

标签: python time-complexity big-o

我试图确定将collections.deque对象转换为python列表对象的复杂度为O(n)。我想这将需要每个元素并将其转换为列表,但是我似乎找不到在双端队列之后的实现代码。那么,Python是否在幕后内置了更有效的功能,可以将O(1)转换为列表?

编辑:基于以下内容,我认为它可能不会比O(n)快 “索引访问在两端都是O(1),但在中间则减慢到O(n)。要进行快速随机访问,请使用列表。”

如果它无法在O(1)时间内访问中间节点,则将无法在没有相同复杂度的情况下进行转换。

2 个答案:

答案 0 :(得分:2)

您必须访问每个节点。仅仅因为这个事实,O(1)时间是不可能的。

我相信双端队列遵循与conventional deques相同的原则,因为访问第一个元素的时间是恒定的。您必须对 n 个元素执行此操作,所以运行时将为O(n)。

答案 1 :(得分:0)

Here is the implementation of deque

但是,这与确定在python中将双端队列转换为列表的复杂度无关。

如果python不以某种方式在内部重用数据结构,则转换为列表将需要遍历双端队列,并且将为O(n)。