【发布时间】: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