問題描述:有N(N>>10000)個整數,求出其中的前K個最大的數。(稱作Top k或者Top 10)
問題分析:由於(1)輸入的大量數據;(2)只要前K個,對整個輸入數據的保存和排序是相當的不可取的。
可以利用數據結構的最小堆來處理該問題。
最小堆如圖所示,對於每個非葉子節點的數值,一定不大於孩子節點的數值。這樣可用含有K個節點的最小堆來保存K個目前的最大值(當然根節點是其中的最小數值)。
每次有數據輸入的時候可以先與根節點比較。若不大於根節點,則捨棄;否則用新數值替換根節點數值。並進行最小堆的調整。如下圖: