1. 給乙個超過100g大小的log file, log中存著ip位址, 設計演算法找到出現次數最多的ip位址?
(1)首先使用雜湊函式hashfunc(ip)將每乙個ip位址轉化為整型,再通過hashfunc(ip)%1000使得每乙個ip各自進入到所切分的1000個小檔案中,餘數是多少就對映到多少號檔案中,這樣做能保證相同ip進入到同一檔案中;
(2)接著在每乙個小檔案中建立key-value模型的雜湊表,各自統計出value(出現次數)最大的ip;
(3)最後依次比較這1000個小檔案中出現次數最多的ip,找到最終出現次數最多的ip位址。
2. 與上題條件相同,如何找到top k的ip?
先對第乙個小檔案的資料建立小堆(大小為k),存入出現次數最多的前k個ip,再依次讀入每乙個檔案,將每乙個ip的出現次數與堆中ip次數比較,如果大於堆頂的ip,則替換堆頂,並更新堆,依次執行下去,直到1000個檔案全部讀完,整個堆的資料即為出現次數最多的前k個ip。
1. 給定100億個整數,設計演算法找到只出現一次的整數
所有整數的範圍是從0到42億9千萬,每個整型占用4位元組,這樣存放這些整數至少需要16g的記憶體空間,太耗費空間了,如果用位圖的思想來解決這個問題,就可以大幅度節省空間。
在該題中需要注意的是要統計次數,而原本的位圖用1個bit位只能表示乙個數是否存在,所以要將原本的點陣圖進行一次變形,用2個bit位表示乙個數(00表示沒有出現,01表示出現一次,10或11表示出現多次),最後統計每兩位為01的資料即為只出現一次的整數,此時存放這些整數占用空間大小約為1g。
2. 給兩個檔案,分別有100億個整數,我們只有1g記憶體,如何找到兩個檔案交集
將每個檔案中的資料都對映到乙個點陣圖中去,每個檔案的資料大約占用500m的記憶體空間,剛好滿足要求,之後讓兩個位圖進行位操作與(&)得到乙個新的點陣圖,在新的點陣圖中統計所有bit位為1的資料即為兩個檔案的交集。
3. 1個檔案有100億個int,1g記憶體,設計演算法找到出現次數不超過2次的所有整數
這個問題和第乙個問題類似,同樣利用點陣圖的思想,用2個bit位表示乙個數(00表示沒有出現,01表示出現一次,10表示出現兩次,11表示出現多次),最後統計每兩位為01或10的資料即為出現次數不超過2次的整數,此時存放這些整數占用空間大小約為1g。
1. 給兩個檔案,分別有100億個query,我們只有1g記憶體,如何找到兩個檔案交集?分別給出精確演算法和近似演算法
(1)精確演算法:利用雜湊切分
假設每個query占用位元組大小為50,那麼每個檔案就需要大約500g的記憶體空間,這顯然滿足不了,這時我們就需要利用雜湊切分將每個檔案切分成1000份小檔案,那麼每個小檔案的占用空間就只有500m左右。
兩個檔案分別使用相同的雜湊函式hashfunc(query)將每乙個query轉化為整型,再通過hashfunc(ip)%1000使得各自的每乙個query進入到所切分的1000個小檔案中,餘數是多少就對映到多少號小檔案中,這樣做能保證相同query進入到同一檔案中,最後再依次比較編號相同的小檔案就可以找到兩個檔案的交集。
(2)近似演算法:利用布隆過濾器
將其中乙個檔案的內容利用布隆過濾器對映到乙個點陣圖中,再用另乙個檔案的內容依次在該位圖上查詢,若存在則為兩個檔案的交集(這種演算法可能會出現誤判的問題)
2. 如何擴充套件bloomfilter使得它支援刪除元素的操作
對於布隆過濾器來說,當我們要刪除某乙個關鍵字時,該關鍵字對應的位可能會牽動到其他的關鍵字,所以乙個簡單的改進就是將位陣列中的每一位擴充套件為乙個counter,從而支援了元素的刪除操作。要注意的一點是:當計數減到0時,就保持0不變,表示該位址處沒有對映。
3.如何擴充套件bloomfilter使得它支援計數操作
要使bloomfilter支援技術操作,每一位至少是乙個int型別,一旦位擴充套件成了counter,每乙個counter就不僅能表示這一位址有無對映,還能表示對映的個數。
給上千個檔案,每個檔案大小為1k—100m。給n個詞,設計演算法對每個詞找到所有包含它的檔案,只有100k記憶體
海量資料處理方法總結
適用範圍 第k大,中位數,不重複或重複的數字 基本原理及要點 因為元素範圍很大,不能利用直接定址表,所以通過多次劃分,逐步確定範圍,然後最後在乙個可以接受的範圍內進行。可以通過多次縮小,雙層只是乙個例子。擴充套件 問題例項 1 2.5億個整數中找出不重複的整數的個數,記憶體空間不足以容納這2.5億個...
海量資料處理分析方法
2008 08 06 08 04 海量資料是發展趨勢,對資料分析和挖掘也越來越重要,從海量資料中提取有用資訊重要而緊迫,這便要求處理要準確,所以,對海量資料的研究很有前途,也很值得進行廣泛深入的研究。在實際工作中,有幸接觸到海量的資料處理問題,對其進行處理是一項艱鉅而複雜的任務。原因有以下幾個方面 ...
海量資料處理方法歸類
解決思路 典型的top k演算法。模板 先用hashmap統計頻率 或去重 維護乙個k大小的堆,統計top k就行了。解決思路 可以估計每個檔案安的大小為5g 64 320g,遠遠大於記憶體限制的4g。所以不可能將其完全載入到記憶體中處理。考慮採取分而治之的方法。遍歷檔案a,對每個url求取hash...