【问题标题】:What will be complexity in this Balanced BST?这个平衡 BST 的复杂性是什么?
【发布时间】:2021-10-28 21:41:17
【问题描述】:

我在一次采访中被问到这个问题,我很想知道对此的正确解释是什么?

考虑以下高度平衡 BST,其中 Balance factor = Height of left subtree - Height of right subtree 和可接受的平衡因子为 0、1、-1、2 和 -2。 在这种高度平衡的 BST 中搜索元素需要多长时间?解释一下。


我说的是,即使在标准 Balance BST 定义中它的高度因子为 2 而不是 1,操作仍然应该是 logN 复杂度顺序,(其中 N 是数字树中元素的数量),因为当 N 很大时,如果高度因子为 2 或 1,则不会产生太大影响。

如果有人能告诉我这里的正确答案会有所帮助:)

【问题讨论】:

  • 好吧,我想说所花费的时间与复杂性并不完全相同。但是你说得对,在足够大树中搜索操作仍然是logN。

标签: data-structures binary-tree binary-search-tree avl-tree red-black-tree


【解决方案1】:

我们可以用数学方法解决这个问题:

定义最坏情况

现在,在任何Binary Tree 中,searching 的时间复杂度为 O(h),其中hBinary Tree高度
现在,在最坏的情况下,我们希望找到最大高度。

如果是简单的Binary Search Tree,没有平衡因子 节点上的条件,这个最大高度可以是nn+1 (取决于 按照惯例,单节点树的高度是 1 还是 0) 其中n 是节点数。

因此,我们可以说given number of nodes, worst case is maximum height

有趣的是,我们也可以说given height of a tree, the worst case is minimum nodes。即使对于这样的最小节点数,我们也可能必须遍历高度为h 的树,我们也必须这样做才能获得最大节点数。

因此,直觉应该很清楚Given Height of Tree, the worst case is minimum number of nodes.

将此概念应用于二叉搜索树

  1. 让我们尝试构建高度为H二叉搜索树,使得树中的节点数最少。李>

在这里,我们将利用二叉树是递归数据这一事实 结构(二叉树可以用二叉树来定义)

  1. 我们将使用符号 NH 来表示高度为 H二叉搜索树 中的最小节点数强>

  2. 我们将创建一个根节点

  3. 到根的Left(或Right),添加高度为H-1(利用递归属性)的子树。因此,整个树中的节点数最少,Left(或Right)子树中的节点数也应该是最少的。因此 NHNH-1

  4. 我们需要向右(或左)添加任何内容吗?
    没有。因为 BST 没有平衡因子的限制。因此,我们的树看起来像

  5. 因此,要构造高度为H二叉搜索树,使得树中的节点数最少,我们可以取二叉搜索树高度为H-1,使得节点数最少,可以添加1个根节点。
    因此,我们可以将Recurrence Relation 形成为
    NH = NH-1 + 1
    基本条件为
    N0=1

要创建高度为 0 的 BST,我们需要添加一个节点。在整个答案中,我们将使用此约定

  1. 现在,这个Recurrence Relation 很容易通过替换来解决,因此
    NH = H+1
    NH > H

  2. 现在,让n 为高度为 H 的 BST 中的节点数
    那么,
    n≥NH
    n≥H
    H≤n
    所以, H=O(n)
    要么 O(H) = O(n)

因此,搜索Worst Case Time Complexity将是O(n)

在 AVL 树上应用这个概念

我们可以在 AVL 树上应用类似的概念。在阅读解决方案的后面部分后,可以找到递归关系:

NH = NH-1 + NH-2 + 1

基础条件:

N0 = 1
N1 = 2

并且,求解递归的不等式条件将是

NH ≥ ((1+√5)/2)H

然后,设n 为节点数。因此,

n≥NH

在简化时,可以得出结论

H ≤ 1.44log2(n)

在 GIVEN 树上应用这个概念

  1. 让我们尝试构造高度为HGiven Tree,使得树中的节点数最少

  2. 我们将使用符号 NH 来表示高度为 HGiven Tree 中的最小节点数

  3. 我们将创建一个根节点

  4. 到根的Left(或Right),添加高度为H-1(利用递归属性)的子树。因此,整个树中的节点数最少,Left(或Right)子树中的节点数也应该是最少的。因此 NHNH-1

  5. 我们需要向右(或左)添加任何内容吗?
    是的! 因为节点上有平衡因子的限制。
    我们需要在Right(或Left)上添加子树。 它的高度应该是多少?

    H?

    不,那么整棵树的高度将变为 H+1

    H-1?

    允许!因为 Root 的平衡因子将为 0

    H-2?

    允许!因为根的平衡因子将是 1

    H-3?

    允许!因为根的平衡因子将是 2

    H-4?

    不允许!因为 Root 的平衡因子将变为 3

    我们想要最少的节点数,所以在H-1H-2H-3 中,我们将选择H-3。因此,整个树中的节点数最少,(或左)子树中的节点数也应该是最少的。因此 NH也是 的函数 NH-3

  6. 因此,要构造高度为H给定树,使得树中的节点数最少,我们可以有 LEFT子树为 Given Tree 高度 H-1 使得 节点数minimum 并且可以将 RIGHT 子树作为 Given Tree的高度H-3 使得其中的节点数也是最少,并且可以添加一个根节点。我们的树看起来像

    因此,我们可以将递归关系形成为

    NH = NH-1 + NH-3 + 1
    基本条件为
    N0=1
    N1=2
    N2=3

  7. 现在,这个Recurrence Relation 很难解决。但是感谢this answer,我们可以得出结论
    NH > (√2)H

  8. 现在,让nGiven Tree 中的节点数,然后,

    n≥NH
    n ≥ (√2)H
    对数√2(n) ≥ H
    H ≤ log√2(n)
    H≤2log2(n)

因此,H=O(log(n))
O(H) = O(log(n))

因此,在这个给定树中搜索最坏情况时间复杂度将是O(log(n))

因此,数学证明!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-23
    • 2011-11-23
    相关资源
    最近更新 更多