python - 在 O(ln n) 的有序序列中插入一个值

标签 python performance data-structures

我正在 python 中寻找一种数据结构(在此示例中由 % 分隔),它可以高效地(O(ln n) 或更好...)按有序序列执行插入:

insert ( 6, % 3, 4, 9 %) ->  % 3, 4, 6, 9 %

对于 listnp.ndarray 它是 O(n)。 dictset 是无序的。

是否有内置(或不内置)方法来做到这一点?

最佳答案

列表 ?

bisect可以帮助你,至少在寻找应该插入元素的位置时 (O(log n)) :

import bisect
l = [3, 4, 9]
bisect.insort_left(l , 6)
print(l)
# [3, 4, 6, 9]

不过,从文档来看:

Keep in mind that the O(log n) search is dominated by the slow O(n) insertion step.

所以list确实是个问题,而不是搜索本身。 python TimeComplexity's table没有显示 O(log n) 插入的任何替代方案。

二叉搜索树

从这里table ,看起来“二叉搜索树”的访问、搜索和插入时间复杂度为 O(log n)。还有其他符合要求的结构,但这可能是最广为人知的。

answer (Implementing binary search tree)应该帮助你。举个例子:

r = Node(3)
binary_insert(r, Node(9))
binary_insert(r, Node(4))
binary_insert(r, Node(6))

in_order_print(r)
# 3
# 4
# 6
# 9

关于python - 在 O(ln n) 的有序序列中插入一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42884954/

相关文章:

C#:与内联代码相比,使用多个函数执行速度如何?

python - Djangobulk_Create,大型csv文件

python - finally 语句在线程中不生效

c++ - 将共享指针还是原始指针传递给函数

asp.net - 诊断 ASP.Net 网站启动缓慢

java - 使用链表和数组构建邻接表图的性能差异巨大

c++ - map<key,bool> 与 set<key> 来跟踪 key 集合的唯一性

c++ - 这个 "ISOTIME"结构代表什么标准?

php - Python 等效于 PHP curl 请求

python - 有条件地保留可选参数