我在python中寻找一个数据结构(在这个例子中由%分隔),它可以有效地(O(ln n)或更好...)以有序的顺序执行插入:
insert ( 6, % 3, 4, 9 %) -> % 3, 4, 6, 9 %
对于list
和np.ndarray
,它是O(n)。 <{1}}或dict
是无序的。
有内置(或没有)方法吗?
答案 0 :(得分:4)
bisect
可以帮助您,至少在寻找应插入元素的位置时(O(log n)
):
import bisect
l = [3, 4, 9]
bisect.insort_left(l , 6)
print(l)
# [3, 4, 6, 9]
但是从文档中可以看出:
请记住,O(log n)搜索由慢速O(n)控制 插入步骤。
所以列表确实是一个问题,而不是搜索本身。 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
答案 1 :(得分:3)