Python中是否有用于平衡二叉树的模块';s标准图书馆?

Python中是否有用于平衡二叉树的模块';s标准图书馆?,python,tree,standard-library,Python,Tree,Standard Library,Python的标准库中是否有一个用于a或a或其他类型的平衡二叉树的模块?stdlib中没有此类模块,但是: 没有,但是SourceForge上有一个(非常古老的!)和一个(封闭的)项目-。没有,stdlib中没有一个平衡的二叉树。但是,从您的评论来看,您可能还有其他选择: 你说你想要一个BST而不是O(logn)搜索的列表。如果您只需要搜索,并且您的数据已经排序,bisect模块为列表提供二进制搜索算法 Mike DeSimone推荐了集合和dict,你解释了为什么列表在算法上太慢。集

Python的标准库中是否有一个用于a或a或其他类型的平衡二叉树的模块?

stdlib中没有此类模块,但是:


没有,但是SourceForge上有一个(非常古老的!)和一个(封闭的)项目-。

没有,stdlib中没有一个平衡的二叉树。但是,从您的评论来看,您可能还有其他选择:

  • 你说你想要一个BST而不是
    O(logn)
    搜索的列表。如果您只需要搜索,并且您的数据已经排序,
    bisect
    模块为列表提供二进制搜索算法
  • Mike DeSimone推荐了集合和dict,你解释了为什么列表在算法上太慢。集合和DICT实现为哈希表,具有O(1)查找。Python中大多数问题的解决方案实际上是“使用dict”

如果两种解决方案都不适合您,您将不得不转到第三方模块或实现您自己的模块。

我发现(在Statndard库中)有一些实例是有用的,特别是在任何给定时间,您都需要O(1)访问集合中最小的元素


对我来说,我一直在跟踪一组计时器,通常只想检查最短的时间(首先执行的时间)是否已经准备就绪。

有一个名为“bintrees”的新包,它支持ubalanced、AVL和RB树。您可以找到它。

还可以查看该项目


这里有一个PyCon讨论:

我编写了Java TreeMap/TreeSet的Python版本,其底层数据结构是一个平衡的二叉树(确切地说是红黑树)

源代码和文档可以在中访问

您可以使用
pip安装pytreemap
进行安装。
测试Python>=3.5

我只使用集合或字典。如果我需要使用更好的散列例程,我会定义
\uuuuuuuhash\uuuuu()
。你需要更漂亮的吗?若然,原因为何?顺便说一句,如果您在docs.python.org中找不到它,它可能不是一个标准模块。@Mike-我正试图解决来自Project Euler的一项任务。我认为使用一个平衡的二叉搜索树而不是我的一个数据容器的列表将加快对数比率的算法(因为O(logn)搜索),这将在不加热我的计算机的情况下解决任务。还有,我只是好奇而已。他为O(1)准备的一套怎么样lookups@Mark:谢谢,这对我来说似乎是个更好的解决办法。我需要的是一个具有快速添加和快速查找功能的数据结构——我不知道Python中的集合速度如此之快。非常感谢!用一套解决了我的问题。我不知道他们在Python中有O(1)个查找(我一直认为在找到正确的值之前应该遍历整个集合-但是正如我所说的,我对Python是新手)。还感谢您对Python中常用数据结构的解释。dict或set的实现是基于哈希表的。由于哈希函数的数学特性,查找时间平均为常数。我安装了bintrees模块(2.0.1),但是当我导入它时,我得到一条消息:
警告:FastBinaryTree不可用,使用Python版本的BinaryTree。
知道如何解决这个问题吗?我安装了Cython,但它在导入时仍然会出现错误。我有点明白了——在Windows上,FastXTree版本需要安装C编译器,如MSVC或Mingw32。我还没有试过——因为我很可能会实现一个自定义树来实现我的目的。From:“编译快速树需要Cython,在Windows上需要C编译器(MingW很好)。@yaraju在安装Cython之后,为了编译fast扩展,您需要重新安装bintrees。还有一个名为docs的fast-as-C纯Python实现,它与您列出的备选方案非常配合。这似乎是2018年的最新版本。