10G文件如何對裏面單詞出現排序

10G文件如何對裏面單詞出現排序的問題(只要文件系統支持,不限大小)。排序

其實這個問題很簡單,10G文件是很大,可是出現的字符或單詞是頗有限的。進程

單字符只有那麼一百多個,單詞數量滿打滿算,以英文單詞總數65萬個爲例。所有,統稱爲單詞。單詞數量按65萬個計算。僅僅每一個單詞的重複出現(頻率)擴大了文件容量而已。即使是100G的文件,出現的單詞也是這些。內存

文件絕對不須要全載入內存,只須要順次讀取掃描過濾單詞便可。這樣纔不會佔用到多大的內存。map

假如咱們以平均每一個單詞10個字節計算,65萬*10字節=650萬字節,就按6.5M內存計算。而後統計頻率用integer,65萬*4 = 260萬字節,就按2.6M內存計算,合計9.1M內存。算上進程其餘開銷分配的內存,滿打滿算,50M總足夠了吧。統計

建一個以單詞爲key,以頻率爲value的 map,map的總項數,就是65萬個。英文

每當都掃描到一個單詞,就把 mapname['該單詞']++,這樣一遍掃描下來,其實這個map就已經完成了全部的單詞的頻率統計了。文件

而後只須要對這個map進行一下排序便可。前面算過內存滿打滿算10M足夠。文件系統

這樣下來,速度也不低,關鍵是內存用的很是少。字符

相關文章
相關標籤/搜索