AVL 树上的二叉搜索树

问题描述 投票:0回答:5

据我所知,AVL树和二叉搜索树之间的时间复杂度在平均情况下是相同的,在最坏的情况下AVL击败了BST。这给了我一个暗示,AVL 在与 BST 交互的所有可能方式上总是优于 BST,在平衡实现方面可能会增加一点复杂性。

有什么理由让任何人首先应该使用 BST 而不是 AVL?

performance data-structures tree binary-search-tree avl-tree
5个回答
24
投票

首先,获得最佳性能并不是编程的最终目标。因此,即使选项 B 总是比 A 更快并且消耗的内存更少,但并不意味着它总是更好的选项(如果它更复杂)。更复杂的代码需要更长的时间来编写,更难以理解并且更可能包含错误。因此,如果更简单但效率较低的选项 A 对您来说足够好,那么这意味着它是更好的选择。 现在,如果你想将AVL树与没有平衡的简单二叉搜索树(BST)进行比较,那么AVL会消耗更多的内存(每个节点必须记住它的平衡因子)并且每个操作会更慢(因为你需要维护平衡因子,有时执行旋转)。

正如你所说,没有平衡的 BST 有一个非常糟糕的(线性)

最坏情况

。但如果你知道这种最坏的情况不会发生在你身上,或者如果在极少数情况下操作很慢你也没关系,那么不带平衡的 BST 可能会比 AVL 更好。


3
投票

由于严格的平衡,搜索永远不会花费类似线性的时间,因此在搜索比更新树更频繁的操作的情况下,您可能需要使用 AVL 树。


0
投票

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

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


0
投票


-1
投票

© www.soinside.com 2019 - 2024. All rights reserved.