基本思路:
1. 用最多K個(gè)元素的最大堆max_heap記錄最終結(jié)果
2. 最大堆的max_heap的所有葉子節(jié)點(diǎn),組成最小堆組成最小堆min_heap
3. 該思路的提出,受啟發(fā)于逆波蘭式算法,雙數(shù)據(jù)結(jié)構(gòu)解決表達(dá)式計(jì)算問題
比較優(yōu)勢(shì):
1. 眾所周知,用快速排序的思想,也可以解出N個(gè)數(shù)中的前K個(gè)最大數(shù),但該算法的好壞,取決于PIVOIT點(diǎn),對(duì)于該點(diǎn)的取舍,目前已知最好策略是取N個(gè)數(shù)中的隨機(jī)某個(gè)元素。所以需要的輪次比較多。本算法一輪,就能找出最大K個(gè)元素,復(fù)雜度O(N)(視K為常數(shù)的情況下)。
2. 該算法可以對(duì)付N超級(jí)大(億級(jí)別),K相對(duì)較小的情況,因?yàn)閮?nèi)存復(fù)雜度只有O(K)
算法步驟如下:

很容易看到,該算法的時(shí)間復(fù)雜度為O( Nlgk), 空音復(fù)雜度為O(K), 特別適用于K相對(duì)較小。
對(duì)該算法有不解的,可以聯(lián)系微信:151305546,謝謝!