【问题标题】:Complexity of Perfectly Balanced Binary Tree完全平衡二叉树的复杂性
【发布时间】:2015-01-24 10:23:00
【问题描述】:

我的场景是一个包含整数的完美平衡二叉树。

我搜索并找到了许多关于二叉树最佳/最坏情况的解释。最好的情况是O(1)(在根中找到目标),最坏的情况是O(log(n))(树的高度)。

我几乎没有找到关于计算平均复杂度的信息。我能找到的最佳答案是O(log(n)) - 1,但我想我不太明白(如果正确的话)这个平均情况是如何计算的。

此外,我认为搜索不在树中的整数会产生相同的复杂性,但任何煽动都会受到赞赏。

【问题讨论】:

标签: binary-tree big-o complexity-theory


【解决方案1】:

假设我们有一个包含n = 2<sup>k</sup> 整数的完美平衡二叉树,因此深度为log₂(n) = k

正如你所说,最好和最坏的情况是O(1)O(log(n))

短途

让我们从二叉树中选择一个随机整数X(均匀分布)。树的最后一行包含与第一行 k-1 相同数量的整数。概率 1/2 X 在第一行 k-1 行,所以我们最多需要 O(k-1) = O(log(n)-1) 步骤来找到它。并且1/2X 可能在最后一行,我们需要O(k) = O(log(n)) 步骤。

我们总共得到

E[X] ≤ P(X 行 ≤ k-1)⋅O(log(n)-1) + P(X 行 = k)⋅O(log(n ))
     = 1/2⋅O(log(n)-1) + 1/2⋅O(log(n))
     = 1/2⋅O(log(n)-1) + 1/2⋅O(log(n)-1)
     = O(log(n)-1)

注意:这有点难看,但在 O 表示法中,O(x)O(x±c) 对于任何常量值 c 都是相同的。

漫长的路

现在让我们尝试计算包含在树中的随机(均匀分布)整数X 的平均情况,并让我们将树的i-th“行”上的整数集命名为T<sub>i</sub>T<sub>i</sub> 包含 2<sup>i</sup> 元素。 T<sub>0</sub> 表示根。

在第 i 行中选择一个整数的概率是P(X ∈ T<sub>i</sub>) = 2<sup>i</sup>/n = 2<sup>i-k</sup>

要在行 i 上找到一个整数,需要 O(2<sup>i</sup>) = O(i) 步骤。

所以预期的步数是

E[X] = Σi=0,...,k-1 O(i)⋅2i-k.

为了简化我们使用

O(i)⋅2i-k + O(i+1)⋅2i+1-k ≤ O(i)⋅2i+ 1-k + O(i+1)⋅2i+1-k ≤ O(i+1)⋅2i+2-k

这导致我们

E[X] = Σi=0,...,k-1 O(i)⋅2i-k ≤ O (k-1)⋅2⁰

由于k = log(n),我们看到平均情况在O(log(n)-1) = O(log(n))

不在树中的值

如果值不在树中,则必须遍历整棵树。在log(n) 步骤之后,您找到了一片叶子。如果该值等于您的输入,则您已找到您搜索的内容。如果没有,您知道,您搜索的值不包含在树中。因此,如果您搜索不在树中的值,它将采用 O(log(n))

【讨论】:

    猜你喜欢
    • 2013-01-23
    • 1970-01-01
    • 1970-01-01
    • 2013-03-02
    • 1970-01-01
    • 2012-12-10
    • 1970-01-01
    • 1970-01-01
    • 2012-12-16
    相关资源
    最近更新 更多