【发布时间】:2018-02-13 00:01:12
【问题描述】:
C++deque:
随机访问 - 常数 O(1)
Pythondeque:
索引访问在两端都是 O(1),但在中间慢到 O(n)。
如果我没有遗漏任何东西,那么对于 python 和 C++ 中的双端队列来说,其他一切都同样快,至少在复杂性方面是这样。在某些情况下,有什么东西可以让 python 的双端队列更好吗?如果没有,他们为什么不直接切换到 C++ 所拥有的?
【问题讨论】:
-
实施细节。在这两种情况下。
-
@IgnacioVazquez-Abrams 这不是重言式吗?
-
@Sneftel “重言式”到底是什么意思?一切都是实现细节?
-
随机访问不是双端队列的核心问题。相反,它是选择在两端快速推送/弹出的方法的副作用。 Python 使用链表,而 C++ STL 倾向于使用块向量。因此,Python 插入几乎可以保证恒定时间:新列表节点的内存分配加上值初始化。不幸的是,访问链表的任意元素是 O(n)。块向量允许快速随机访问,但可能需要 O(n) 时间来重新组织任何给定插入的映射向量(尽管 n 次插入需要 O(n) 时间)。