【问题标题】:Time complexity of creation of BSTBST创建的时间复杂度
【发布时间】:2016-05-31 11:09:18
【问题描述】:

在创建 n 节点的二进制堆的情况下,考虑到在任何高度 h 都会有 atmax 的事实,它的时间复杂度结果是 O(n) 而不是 nlog(n)

节点最多需要 O(h) 时间来堆积。

在类似的方面,我想证明 BST 的创建。为此,我使用这样一个事实,即在任何深度 d 最多可以有 2^d 个节点,这将花费 atmax O(d) 时间进行插入。所以方程是

这个等式为什么会导致 nlog(n) - BST 创建的预期时间复杂度或 O(n^2) - 最坏情况复杂度。请提出一种如何从上述等式进一步推进的方法。

【问题讨论】:

  • 你的数学不正确。您的总和是错误的,因为大多数节点都插入了更深的地方。二进制堆的创建是 O(N),因为使用自下而上的构造而不是插入然后堆化每个元素。如果你必须单独插入每一个,那将是 O(N log N)。
  • 这里有什么问题请说明,对于 n-node bst atleast floor(log(n)) -height 是必需的,在每个深度 d 它将有 2^d 个节点,考虑到平衡 bst 15 个节点高度,结果为 floor(log(15)) 即 3,在第 3 级它将有 2^3 个节点,即 8 个节点。对于插入场景,所有 8 个节点都必须向下移动到最后一层,从而产生 2^d*h 类方程。如果错了,我在这里缺少什么?
  • h、d 和 n 是相关的。这样做更容易:一半节点将以深度 log(n) 插入,因此如果插入时间与深度成正比,则总插入时间 >= O(0.5 n log n) >= O(n log n)。同样,所有节点都将插入深度
  • 我知道如果我认为这样可以很容易地将复杂性可视化为 nlog(n),但是上面等式的扩展看起来应该比 nlog(n) 更多。这就是我在这里问的原因。

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


【解决方案1】:

我终于解决了那个系列。

令 T=log(N) 即 2^T = N(节点数)............(1)
问题变成 Summation_of(2^d * d) ,其中 d 的范围从 o 到 T。所以

G(T) = 0*2^0 + 1*2^1 + 2*2^2 + ..... + T*2^T。
2G(T) = 0*2^1 + 1*2^2 + ..... +(T-1)*2^T + T*2^(T+1)
2G(T)-G(T) = 0 - 2^1 -2^2 - ..... - 2^T + 2T*2^T
G(T) = - 2^(T+1)-2 + 2T*2^T G(T) = 2( (T-1)2^T +1 ) 即 = 2( (log(N)-1)N +1 )............从 (1)

因此给出上限为 N log (N)(考虑平衡树)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-14
    • 2020-10-09
    • 2015-03-24
    相关资源
    最近更新 更多