經典算法-海量數據處理算法(top K問題)

舉例

有一個1G大小的一個文件,裏面每一行是一個詞,詞的大小不超過16字節,內存限制大小是1M。返回頻數最高的100個詞。排序

思路

  • 首先把文件分開
  • 針對每一個文件hash遍歷,統計每一個詞語的頻率
  • 使用堆進行遍歷
  • 把堆歸併起來

具體的方案

1.分治: 順序讀文件中,對於每一個詞c,取hash(c)%2000,而後按照該值存到2000個小文件中。這樣每一個文件大概是500k左右。內存

注意:

若是其中的有的文件超過了1M大小,還能夠按照相似的方法繼續往下分,直到分解獲得的小文件的大小都不超過1M。hash

2.hash遍歷: 對每一個小文件,用hash的方式統計每一個文件中出現的詞以及相應的頻率class

3.堆遍歷: 用 最小堆取出出現頻率最大的100個詞,並把100個詞及相應的頻率存入文件,這樣又獲得了5000個文件。遍歷

4.歸併整合方法

下一步就是把這5000個文件進行歸併(相似與歸併排序)的過程了。統計

相關文章
相關標籤/搜索