在AVL树的二进制搜索树

时间:2013-02-03 08:36:04

标签: performance data-structures tree binary-search-tree avl-tree

据我所知,AVL树和Binary Search Trees之间的时间复杂度在平均情况下是相同的,在最坏的情况下AVL会击败BST。这给了我一个提示,即AVL总是优于BST以各种可能的方式与它们进行交互,在平衡实现方面可能会增加一些复杂性。

首先有人应该使用BST而不是AVL吗?

4 个答案:

答案 0 :(得分:21)

首先,获得最佳性能是编程的最终目标。因此,即使选项B总是更快并且消耗的内存少于A,但这并不意味着它总是更好的选择,如果它更复杂的话。更复杂的代码需要更长的时间来编写,更难理解并且更可能包含错误。因此,如果更简单但效率更低的选项A对您来说足够好,那么这意味着它是更好的选择。

现在,如果你想比较AVL树和简单的二进制搜索树(BST)而不进行平衡,那么AVL将消耗更多内存(每个节点必须记住它的平衡因子)并且每个操作都可能更慢(因为你需要保持平衡因子,有时进行轮换)。

正如你所说,没有平衡的BST有一个非常糟糕的(线性)最坏情况。但是如果你知道这种最坏的情况不会发生在你身上,或者如果在极少数情况下你的运作速度很慢,那么没有平衡的BST可能比AVL更好。

答案 1 :(得分:1)

由于检查和更新平衡因子和旋转节点会增加额外开销,因此与非平衡BST相比,AVL树中的插入和删除速度可能相当慢。

由于平衡紧密,搜索永远不会采用类似线性的时间,因此在搜索比更新树更频繁的操作的情况下,您可能希望使用AVL树。

答案 2 :(得分:0)

我的假设是:当你提到BST时,你指的是没有平衡的BST。

可以说,如果你需要一个可导航的数据结构,并且你知道你的数据不是最坏情况(排序)并且有点小,那么BST(没有平衡)就足够了。

但这很可能是一种罕见的情况。

答案 3 :(得分:-1)

AVL树也是BST,但它可以自我重新平衡。这种行为使得在最坏的情况下更快。它保持自我重新平衡,因此在最坏的情况下,当普通BST将采用O(n)时,它将消耗O(log n)时间。那么,你的问题的答案:实现AVL树总是比普通的BST更好。

相关问题