1. 程式人生 > >[CareerCup] 10.6 Find Duplicate URLs 找重複的URL連結

[CareerCup] 10.6 Find Duplicate URLs 找重複的URL連結

10.6 You have 10 billion URLs. How do you detect the duplicate documents? In this case, assume that "duplicate" means that the URLs are identical.

這道題讓我們在一百億個URL連結中尋找相同項,看這資料量簡直嚇尿了,如果每個URL連結平均100個字元的話,每個字元是4個位元組,那麼總共需要佔4TB的空間,我們無法在記憶體中匯入這麼大的資料量。假如我們恩能夠把資料全部匯入到記憶體中,那麼找重複項就不是一件難事,我們可以使用雜湊表來建立每個URL和其是否存在過建立對映,很容易能找到重複項。那麼下面來看我們怎麼處理這麼大的資料量,我們可以有如下兩種方法:

1. 硬碟儲存

將所有的資料存到一臺機子上,我們可以把4TB的資料分為4000份,每份1GB大小,然後我們把每個URL u存在檔案x.txt中,其中x=hash(u)%4000,這樣具有相同雜湊值的URL都被放到一個檔案中了。然後我們再把每個檔案匯入記憶體,來尋找重複值。

2. 多臺機器

另一種方法是使用多臺機器,我們不是將資料存在x.txt,而是將URL發給機器x. 使用這種方法有好處也有壞處。好處是可以並行操作,4000個塊可以同時進行操作。壞處是我們需要4000臺機器,這不太現實,而且還要考慮如何處理失敗。