【发布时间】:2020-03-20 04:03:36
【问题描述】:
我正在经历 max-heapify,下面是观察结果
1- 观察 max-heapify 对于比叶子高一级的节点需要 O(1) 时间,对于比叶子高 L 级的节点通常需要 O(L) 时间
2- n/4 个节点,级别 1,n/8 个节点,级别 2,依此类推。
for循环的总工作量:
n/4 (1 c) + n/8 (2 c) + n/16 (3c) + ... + 1(log n c)
设置 n/4 = 2 pow k
C*2powk (1/2pow0 + 2/2pow1 + 3/2pow2 + ... + (k+1)/2powk)
括号中的数列是由一个常数限制的收敛数列
算法是:
构建最大堆 (A)
for i=n/2 down to 1:
do max-heapify (A,i)
我从讲座中了解了大部分内容,但我在某些方面感到困惑
1- 为什么我们使用 n/4 (1 c),为什么不使用 n/2?以及我们如何知道 n/4 将我们引导至 1 级
2- 这个收敛级数如何将我们引向 theta n 复杂度
【问题讨论】:
-
是的,它帮了很多忙,你能帮我解决这个问题吗(7 3 2*1 + 1*2 = 4),堆大小为 7,级别 3,如何计算电影 2* 1+1*2?是子孙的根吗?
-
一个有七个节点的堆有三层。根级别有 4 个节点永远不会移动。在叶级别之上的级别上,有两个节点可以潜在地向下移动一级(2 * 1)。根节点有一个节点可能会向下移动两级 (1*2)。
标签: algorithm time-complexity big-o heap heapsort