performance - AVL 树上的二叉搜索树

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

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

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

最佳答案

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

现在,如果你想在不平衡的情况下将 AVL 树与简单的二叉搜索树 (BST) 进行比较,那么 AVL 会消耗更多的内存(每个节点必须记住它的平衡因子)并且每次操作可能会更慢(因为你需要保持平衡因素,有时执行旋转)。

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

关于performance - AVL 树上的二叉搜索树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14670770/

相关文章:

c++ - 为没有明显结束的容器实现迭代器是否有意义 - 例如树?

f# - 在 F# 树上并行化函数的选项

MySQL Innodb 全文邻近搜索性能糟糕

android - 如何在视频渲染案例中使用 ImageView 进行高效处理?

python - 为什么 numpy 比 for 循环慢

tree - 如何重新加载树的选定节点

parsing - $1, $2 .. 变量中的值始终为 NULL

c# - 您使用常规构建作为编码工具吗?

java - 在二维图中找到最接近给定点的坐标的算法

Java 切换列表