單機環(huán)境,有大約1TB硬盤裝滿了md5哈希,里邊有重復的,怎樣才可能最快速度踢出重復的。內存大小限定為512MB吧
我實際遇到的一個問題,我去知乎提問了。居然被管理員封了,說我“代為解決個人問題”
https://www.zhihu.com/questio...
我把我知乎的回復抄過來
居然有人投訴說"代為完成個人任務",也是醉了。這個問題不是面試題,也不是啥個人問題。是我實實在在遇到的問題。我有個思路,實現(xiàn)也簡單,但是預估計跑完得個把星期了。
現(xiàn)在有兩T,1TB是數(shù)據(jù),另外1TB用來存放結果。
我現(xiàn)在沒有啥特別好的思路。只有最簡單的優(yōu)化。
分文件
A分區(qū)存1TB數(shù)據(jù),B分區(qū)空閑
MD5hash 特點0~9a-f 總共16種情況 總共32個字符。
第一步分級
分兩級
第一級 0·f 總公16個目錄
第二級 0-f 總共16 個文件
那么這樣下來我們總共會有256個文件
從A分區(qū)中順序讀取哈希,哈希的第一個字母情況根據(jù)目錄進行分類;
哈希的第二個字母進行文件分類;對于任意一個A分區(qū)中的數(shù)據(jù),會通過前兩個字母定位
到這256個文件中的某一個;
順序遍歷A分區(qū)數(shù)據(jù),完成全部操作之后會生成256個文件。
第二步
此時就轉化成為將256個小一點的文件進行去重;
對于小一點的文件去重;
分塊讀入內存進行堆排序,進行一次順序遍歷則可以剔除重復數(shù)據(jù);
對于兩個已經分塊的順序數(shù)據(jù)合并去重;這種情況相當于“”有序單鏈表合并問題“”
很容易做到;
依次重復1.2兩步可以將這256個小文件去重;此時得到結果
這是我想的一個簡單辦法,但是估算了一下時間可能要個把星期。。。好久