我正在经历max-heapify,下面是观察结果
1-对于叶子上一级的节点,观察max-heapify取O(1),对于叶子上一级L的节点,一般观察到O(L)次]]
2-具有级别1的n / 4个节点,具有级别2的n / 8个节点,依此类推。
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-此收敛级数如何使我们达到理论复杂性
我正在经历max-heapify,下面是观察值1-对于叶子上方一个级别的节点,观察max-heapify需O(1);对于L之上的级别,节点通常需要O(L)次。 。
1:考虑一些(为简单起见,是完整的)二叉树。它有一个根,在根下面有两个节点,在它们下面有4个节点,依此类推。因此,高度为h的二叉树中的节点数为