【问题标题】:What is the complexity of insertion operation for 1...n keys in BST and Splay tree?BST 和 Splay 树中 1...n 个键的插入操作的复杂度是多少?
【发布时间】:2018-05-21 21:17:53
【问题描述】:

如果要按顺序插入 n 个键 1,2,…,n,

(一)。到正常的 BST(二叉搜索树)

(b)。到张开树

在每种情况下 (a), b) 的复杂度是多少?

这两种情况都是 O(log n) 吗?还是 (a) 的 O(log n) 和 (b) 的 O(M log n) ?

【问题讨论】:

    标签: algorithm time-complexity binary-search-tree insertion splay-tree


    【解决方案1】:

    根据 Wikipedia Splay tree 文章,平均插入时间是 O(log n),最坏的情况是摊销 O(log n)。因此,您将所有项目插入 Splay 树的预期时间为 O(n log n)。

    二叉搜索树的情况取决于您使用的 BST 类型。对于原始 BST,按顺序插入项目是最坏的情况,因为它会创建一个退化的树——一个链表。这是每次插入的 O(n)(其中 n 是树中的项目数)。所以插入所有项目需要 O(n^2)。

    插入退化树是 O(n),因为树本质上是一个链表。按顺序插入数字[1, 2, 3] 后,您的树如下所示:

    1
     \
      2
       \
        3
    

    如果你想插入4,代码必须在添加4作为3的右孩子之前查看每个现有项目1、2和3。当你去插入@987654325 @,又得看前面四项了。每次插入都必须查看所有先前的项目。插入n项时的比较总数为(n*(n-1))/2,即O(n^2)。

    如果您使用的是自平衡二叉搜索树,则插入是 O(log n),所有项目的插入将需要 O(n log n)。

    【讨论】:

    • 谢谢。就我而言,这是一个原始的 BST。正如您所提到的,当我将 1...8 插入 BST 时,我得到了一棵退化树。插入正好用了 8 个步骤。在原始 BST 中,每次插入的成本是 O(n) 还是 O(1) ?你能解释一下为什么它是 O(n) 吗?也许我缺少一些基础知识。
    • @IsharaAmarasekera:我更详细地更新了答案。我说过插入退化的 BST 是 O(n)。平均而言,插入平衡 BST 的时间为 O(log n)。在任何情况下都不是插入 O(1)。
    • 现在我明白了。感谢@Jim Mischel 的澄清。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-27
    • 1970-01-01
    • 1970-01-01
    • 2014-05-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多