【问题标题】:How Python3 sorted list operations compare to a balanced BST?Python3 排序列表操作与平衡 BST 相比如何?
【发布时间】:2019-10-27 21:29:50
【问题描述】:

我正在使用内置 bisect 模块对二进制搜索值使用排序列表,该模块的查找时间为 O(log n)。 bisect 的文档指出,使用insort() 插入会在列表中占主导地位的插入时间为 O(n) 的总时间。它的删除时间也是 O(n)。

有没有办法使用一个列表并让 O(log n) 插入、删除和查找?我可以使用像红黑树这样的平衡二叉搜索树 (BST) 来做到这一点吗?哪个 Python3 模块具有具有这些属性的数据结构?

注意:我看到 PyPI 上有一个包含 RBTree 和 AVLTree 的包 bintrees,但它已被废弃,并且它们的文档指向使用 sortedcontainers 库。就我所见,sortedcontainers 没有这些树可供使用(它们是用 C 编写的,是 SortedList、SortedDict 和 SortedSet 的基础)。

【问题讨论】:

    标签: python-3.x list data-structures time-complexity binary-search-tree


    【解决方案1】:

    我可以使用像红黑树这样的平衡二叉搜索树 (BST) 来做到这一点吗?

    是的。

    哪个 Python3 模块具有具有这些属性的数据结构?

    Python 内置数据结构set 有 O(log n) 的插入、删除和查找。更准确地说,所有这些操作的更严格的界限是(摊销的)O(1)。

    但是,这些集合没有排序。这些由sortedcontainers提供。

    就我所见,sortedcontainers 没有这些树可供使用(它们是用 C 编写的,是 SortedList、SortedDict 和 SortedSet 的基础)。

    我不太确定库的实现细节,但SortedSet(或更一般的SortedDict)是你想要的(O(log n)插入,O(log n)删除,O( 1)查找)如果您需要排序集。否则,使用内置的set

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-09
      • 2012-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多