1.用堆从海量数据里面找最大
K
K
个数是用最小堆,而不是最大堆,反之找最小个数字是用最大堆
2.建堆的时间复杂度为
O(n)
O
(
n
)
证明如下:
假设树高度为
h
h
(根结点为第1层),那么第 层结点数为
2i−1
2
i
−
1
,我们从最后一层非叶结点开始调整,于是总的时间复杂度为
S=2h−2⋅1+2h−3⋅2+⋯+1⋅(h−1)=2h−2−(h−1)
S
=
2
h
−
2
⋅
1
+
2
h
−
3
⋅
2
+
⋯
+
1
⋅
(
h
−
1
)
=
2
h
−
2
−
(
h
−
1
)
因为 n=2h−1 n = 2 h − 1 ,所以总的时间复杂度为 S=n−log(n)=O(n) S = n − l o g ( n ) = O ( n )