【问题标题】:What should I choose for an easy to code balanced binary search tree?我应该为易于编码的平衡二叉搜索树选择什么?
【发布时间】:2014-09-18 20:27:32
【问题描述】:

我想知道哪种平衡 BST 更容易在 C++ 中编码,并且仍然具有大致等于 O(logn) 的复杂度。

我已经尝试过红黑树,但想要一种代码不太复杂的替代方案。我过去曾与 Treaps 合作过,但我有兴趣探索性能更好或更易于实施的选项。

你有什么建议?

【问题讨论】:

    标签: c++ binary-search-tree red-black-tree treap


    【解决方案1】:

    AVL 树在我的经验中通常比 Treaps 表现更好,而且它们实施起来并不难。

    它们通过旋转在任何插入或删除后变得不平衡的树的分支来工作。这保证了它们将具有完美的平衡,因此它们不会被奇怪的数据“欺骗”。

    另一方面,Treaps 是随机分布的,对于大型数据集而言,这接近于平衡,但您仍然没有得到完美的 O(logn)。此外,您可能碰巧遇到以非常不平衡的方式插入的数据集,并且您的访问时间可能接近 O(n)。

    查看维基百科页面了解更多信息:en.wikipedia.org/wiki/Avl_tree

    【讨论】:

    • 对不起,你错了。陷阱中随机性的来源不是数据集。没有任何平衡的正常 BST 在随机数据集上表现良好。在 treaps 中,我们提供了自己的随机性,就像在快速排序中一样,所以最坏的情况不能通过输入来强制。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-18
    • 1970-01-01
    • 1970-01-01
    • 2012-05-13
    相关资源
    最近更新 更多