Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
平衡二叉搜索树批量拆分/连接操作的Python实现_Python_Data Structures_Binary Search Tree - Fatal编程技术网

平衡二叉搜索树批量拆分/连接操作的Python实现

平衡二叉搜索树批量拆分/连接操作的Python实现,python,data-structures,binary-search-tree,Python,Data Structures,Binary Search Tree,我正在搜索一个平衡二叉搜索树的实现(例如AVLTree或RedBlackTree)。 我发现bintrees包含了这些数据结构的一个很好的实现 但是,我希望能够在O(log(n))时间内提取或删除介于最小值和最大值之间的子树。我还想把现有的两棵树合并成一棵新的树。查看bintreessourcecode,这些操作似乎需要O(nlog(n))时间。它不执行大容量拆分/联接操作,而是迭代每个项并执行关联单例日志(n)操作 查看,执行几乎任何不是最小/最大项查询的操作都将调用iter\u项,我认为这一

我正在搜索一个平衡二叉搜索树的实现(例如AVLTree或RedBlackTree)。 我发现
bintrees
包含了这些数据结构的一个很好的实现

但是,我希望能够在O(log(n))时间内提取或删除介于最小值和最大值之间的子树。我还想把现有的两棵树合并成一棵新的树。查看
bintrees
sourcecode,这些操作似乎需要O(nlog(n))时间。它不执行大容量拆分/联接操作,而是迭代每个项并执行关联单例日志(n)操作

查看,执行几乎任何不是最小/最大项查询的操作都将调用
iter\u项
,我认为这一定是O(n)

例如:

import bintrees
items = list(range(20))
bst = bintrees.AVLTree(zip(items, items))
# Slicing is nice because it just accesses the first and last element
sub_slice = bst[5:15]

# But it seems like if I do anything with the slice all of its items are
# expanded and each operation is performed individually

# I want a subtree (no copying) in O(log(n)), but this seems to take O(n)
sub_pointer = bintrees.AVLTree(bst[5:15])

# I want to delete in O(log(n)), but this seems to take O(n)
del bst[5:15]
我这样做是因为我试图用Python实现一个数据结构(最终我试图实现一个完整的动态连接数据结构)。这篇论文和我下面的文章都建议使用一个平衡的二叉搜索树来表示Euler旅行中的访问顺序。然而,他们使用它们的原因似乎是因为高效的拼接操作以及非常快速的最小/最大查询

我不认为找到一个基于Python的BBST数据结构并进行批量拆分/连接拼接操作会如此困难。是不是
bintrees
可以执行这些操作,而我却错过了它?有没有一个大家都知道的好库可以在规定的时间内完成这些操作