【问题标题】:Which is a better time complexity?哪个时间复杂度更好?
【发布时间】:2017-12-05 00:31:52
【问题描述】:

我必须挑选出在 AVL 树上哪些操作的最坏情况时间复杂度比 BST 更好。我已经确定每个操作的时间复杂度是相同的,具体取决于树...

AVL 树的最坏情况时间复杂度是...

Insert - O(log(n))
Remove - O(log(n))
Search - O(log(n))

BST 的最坏情况时间复杂度是......

Insert - O(height)
Remove - O(height)
Search - O(height)

那么 O(log(n)) 的时间复杂度是否比 O(height) 更好?

【问题讨论】:

标签: time-complexity


【解决方案1】:

BST 上插入、删除和搜索的最坏情况时间复杂度为O(n),其中n 是 BST 中的节点数。您可以通过按顺序将节点插入 BST 来触发这种最坏的情况,使得 BST 本质上是一个链表(例如,首先插入 1,然后插入 2,然后插入 3,依此类推......你最终会得到一个BST 看起来像 1 -> 2 -> 3...)。

O(log(n)) 的时间复杂度比O(n) 好。

【讨论】:

  • 那么 AVL 树对于所有 3 个操作都有更好的最坏情况? (插入、删除和搜索)
  • 是的,没错。 AVL 树是自平衡的,这意味着无论您向其中添加节点的顺序如何,它的最大高度都将保持O(log(n))。您不能像在 BST 中那样触发链表最坏情况。
【解决方案2】:

O(log(n))O(height) 的最佳情况。二叉树的高度可以是log(n)n 之间的任何整数,其中n 表示节点数。

例如,如果您有一个 BST,其中每个节点只有右子节点,则它与链表相同,因此所有三个操作的最坏情况复杂度为 @987654326。

另一方面,AVL 是自平衡二叉搜索树,这意味着来自任何节点的每两个子树都具有相同的深度(高度)+- 常数。这意味着您将每一步的值减半,从而获得O(log(n)) 复杂度,这也是您的O(height) 复杂度。

【讨论】:

    【解决方案3】:

    AVL 树基本上是高度平衡的 BST。 如果考虑完整的 AVL 树,log n (AVL 树) > log n (BST)。 -> 其中 n 是节点数。

    而当您考虑 O(身高)时,它在 AVL 和 BST 中都是相同的。
    3
    \
    5
    (英国夏令时)
    高度 = 2 , n = 2

      3  
     / \  
    2   5  
           (AVL)
    

    高度 = 2,n = 3

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-08
      • 2020-03-24
      • 2018-04-09
      • 2018-06-13
      • 1970-01-01
      相关资源
      最近更新 更多