AVL 树是邪恶的吗? [关闭]
Posted
技术标签:
【中文标题】AVL 树是邪恶的吗? [关闭]【英文标题】:Are AVL Trees Evil? [closed] 【发布时间】:2010-11-26 13:13:55 【问题描述】:我正在阅读来自 Steve Yegge 的关于单身人士的 article。在其中他提到他的老师告诉他 AVL 树是邪恶的。只是红树和黑树是更好的解决方案吗?
【问题讨论】:
OP 代表 666 确认 AVL 树是邪恶的 我不认为我们可以支持这个问题吗? ;) 【参考方案1】:从什么角度来看邪恶?
一如既往:没有坏工具,只有坏工匠。
在我的记忆中,AVL 树的插入/删除速度较慢,但检索速度比红/黑树快。主要是因为平衡算法。
【讨论】:
没错。如果您需要一次写入多次读取的映射,AVL 树很难被击败。在我看来,它们也更容易正确实施。 对我来说,一次写入-多次读取的映射听起来更像是一个排序数组... 很少写入-多次读取的映射听起来比 AVL 树更多。但是,即使在这些情况下,也一定要考虑排序数组。恒定成本要低得多,因此在 AVL 树的性能优于红/黑树和排序数组之前,您需要许多条目。 AVL 树是高度可理解的。 IME、RB 树的实现者并不理解它们——它们只是遵循规则;从概念上讲,他们并没有真正理解正在发生的事情。【参考方案2】:不,AVL 树在任何方面都肯定不是邪恶的。它们是完全有效的自平衡树结构。它们肯定具有与红黑树不同的性能特征,通常这些差异导致人们选择红黑树而不是 AVL 树。但这并不会使他们变得邪恶。
【讨论】:
【参考方案3】:我确信 AVL 树是邪恶的,就像 GOTO 是邪恶的或 BUBBLE SORT 是邪恶的一样。
算法并不邪恶,但算法也不会跳来跳去告诉你什么时候合适。
【讨论】:
Goto 不是算法,也不是合法的比较。 冒泡排序的问题在于没有真正的权衡可以使它变得更好。对于 AVL 树,你不能这么说。 ::snark:: 冒泡排序使用的代码很少,在传统的图灵机中很容易实现。 有(罕见的)冒泡排序是最快排序的情况。 @Henk:我什至不会称它们为稀有。当您的输入数据主要进行排序时,冒泡排序本质上是线性时间。【参考方案4】:这里有很多关于 Red-Black 和 AVL-Trees 之间差异的信息:
http://discuss.fogcreek.com/joelonsoftware/default.asp?cmd=show&ixPost=22948
还有一篇比较不同结构的论文:
http://www.stanford.edu/~blp/papers/libavl.pdf
简而言之 - AVL 搜索速度更快,Red-Black 插入速度更快。
【讨论】:
fogcreek 链接不正确。内容具有误导性。 AVL 树不需要 O(log n) 旋转来重新平衡。最多 2 个。【参考方案5】:Splay Trees 更酷。 :)
【讨论】:
【参考方案6】:不,它们并不邪恶,只是编程有点棘手。
AVL 树 http://www.eternallyconfuzzled.com/tuts/datastructures/jsw_tut_avl.aspx
那里也有红黑树链接。
【讨论】:
以上是关于AVL 树是邪恶的吗? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章