【发布时间】:2014-09-18 20:27:32
【问题描述】:
我想知道哪种平衡 BST 更容易在 C++ 中编码,并且仍然具有大致等于 O(logn) 的复杂度。
我已经尝试过红黑树,但想要一种代码不太复杂的替代方案。我过去曾与 Treaps 合作过,但我有兴趣探索性能更好或更易于实施的选项。
你有什么建议?
【问题讨论】:
标签: c++ binary-search-tree red-black-tree treap
我想知道哪种平衡 BST 更容易在 C++ 中编码,并且仍然具有大致等于 O(logn) 的复杂度。
我已经尝试过红黑树,但想要一种代码不太复杂的替代方案。我过去曾与 Treaps 合作过,但我有兴趣探索性能更好或更易于实施的选项。
你有什么建议?
【问题讨论】:
标签: c++ binary-search-tree red-black-tree treap
AVL 树在我的经验中通常比 Treaps 表现更好,而且它们实施起来并不难。
它们通过旋转在任何插入或删除后变得不平衡的树的分支来工作。这保证了它们将具有完美的平衡,因此它们不会被奇怪的数据“欺骗”。
另一方面,Treaps 是随机分布的,对于大型数据集而言,这接近于平衡,但您仍然没有得到完美的 O(logn)。此外,您可能碰巧遇到以非常不平衡的方式插入的数据集,并且您的访问时间可能接近 O(n)。
查看维基百科页面了解更多信息:en.wikipedia.org/wiki/Avl_tree
【讨论】: