建堆的复杂度先考虑满二叉树,和计算完全二叉树的建堆复杂度一样。
对满二叉树而言,第 i 层(根为第 0 层)有 2^i 个节点。
由于建堆过程自底向上,以交换作为主要操作,因此第 i 层任意节点在最不利情况下,需要经过 (n−i)
次交换操作才能完成以该节点为堆根节点的建堆过程。
元素总个数N,完全二叉树层数n,则有 n = logN
利用N的二进制表示,对总操作数进行图形化推导
T
(
N
)
=
2
n
+
1
−
n
−
2
=
N
∗
(
1
−
l
o
g
N
N
−
2
N
)
≈
N
T(N) = 2^{n+1} - n - 2 = N * (1 - \frac{logN} { N} - \frac{2} {N}) ≈ N
T(N)=2n+1−n−2=N∗(1−NlogN−N2)≈N