【问题标题】:Complexity of inserting n numbers into a binary search tree将 n 个数字插入二叉搜索树的复杂性
【发布时间】:2013-02-25 16:09:36
【问题描述】:

我有一个问题,它说“计算将 n 个数字插入二叉搜索树的过程的时间复杂度”。它并不表示这是否是平衡树。那么,这样的问题能给出什么答案呢?如果这是一棵平衡树,则高度为 logn,插入 n 个数字需要 O(nlogn) 时间。但这是不平衡的,在最坏的情况下甚至可能需要 O(n2) 时间。找到将 n 个数字插入 bst 的时间复杂度是什么意思?我错过了什么吗?谢谢

【问题讨论】:

    标签: algorithm tree complexity-theory binary-search-tree asymptotic-complexity


    【解决方案1】:

    wiki 所说的是正确的。 由于给定的树是一棵 BST,所以不需要搜索整个树,只需将要插入的元素与树/子树的根进行比较,就可以获得第一个元素的适当节点。这需要 O(log2n)。 一旦我们有了这样一个节点,我们就可以在其中插入密钥,然后需要将正确的 aub-tree 中的所有元素向右推,这样 BST 的搜索属性就不会受到侵犯。如果要插入的位置是最后一个,我们需要担心第二个过程。如果注意此过程可能需要 O(n),最坏的情况! 因此,在 BST 中插入元素的总体最坏情况复杂度为 O(n)。 谢谢!

    【讨论】:

      【解决方案2】:

      即使树是平衡的,也可能是 O(n^2)。

      假设您要添加一个排序的数字列表,所有数字都大于树中的最大数字。在这种情况下,所有数字都将添加到树中最右边叶子的右孩子,因此 O(n^2)。

      例如,假设您将数字 [15..115] 添加到以下树中:

      数字将被添加为一个长链,每个节点都有一个右手子节点。对于列表的第 i 个元素,您必须遍历 ~i 个节点,这会产生 O(n^2)。

      一般来说,如果你想保持在 O(nlogn) 的插入和检索,你需要使用Self Balancing trees

      【讨论】:

      • 我明白了,但我不明白为什么它是 O(n^2)
      • 我的意思是,这仍然是最坏的情况,紧的时间复杂度是否意味着?那么,那是 Θ(n^2) 吗?
      • 是的,这是最坏的情况。您可以使用 O(nlogn) 找到特定场景。
      • 我想是1+2+3+4+5+...+n
      • 为什么维基百科说 BST 插入最坏的情况是 O(n)? en.wikipedia.org/wiki/Binary_search_tree
      猜你喜欢
      • 2010-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多