給乙個超過100g大小的log file, log中存著ip位址, 設計演算法找到出現次數最多的ip位址?思路 :
1 . 使用雜湊切割 , 將100g大小的檔案分成1000分小檔案 ,
2 . 使用 hashstr( ip )%1000 將每個檔案上的ip位址對映到雜湊表中 , 然後將ip位址轉化成整數形式
3 . 使用key value 模型 , 將ip位址出現的次數儲存起來
4 . 將每個小檔案中ip位址出現的次數進行比較 , 找出出現次數最多的ip位址
2.與上題條件相同, 如何找到topk的ip?思路 :
相當於在1000個小檔案裡邊尋找top k個ip , 去k個ip位址建立乙個小堆, 若果大於堆頂元素則則覆蓋堆頂元素 , 若果小於堆頂元素則不處理 , 最後堆裡邊的元素就是top k個ip
給定1000億個整型,設計演算法找到只出現一次的整數?用bitmap表示資料,bitmap中每兩位代表乙個整數,00代表該整型未出現過,01代表出現過1次,11代表出現超過1次。最後只需輸出01對應的整型即可。(優點:節省記憶體)
給兩個檔案,分別有100億個整數,我們只有1g記憶體,如何找到兩個檔案的交集?使用hash函式將第乙個檔案的所有整數對映到1000個檔案中,每個檔案有1000萬個整數,大約40m記憶體
記憶體可以放下,把1000個檔案記為 a1,a2,a3…a1000,用同樣的hash函式對映第二個檔案到1000個檔案中,這1000個檔案記為b1,b2,b3…b1000,由於使用的是相同的hash函式,所以兩個檔案中一樣的數字會被分配到檔案下標一致的檔案中,分別對a1和b1求交集,a2和b2求交集,ai和bi求交集,最後將結果彙總,即為兩個檔案的交集
位圖應用變形:1個檔案有100億個int,1g記憶體,設計演算法找到出現次數不超過2次的所有整數思路 : 使用兩個位圖 , 也是應用其組成的四個狀態 , 沒有出現 ( 0 0 ) , 出現了一次 ( 0 1 ) , 出現兩次 ( 1 0 ) , 三次及三以上 ( 1 1 ) 當存放乙個元素時 , 只要找出該元素在兩個點陣圖中狀態不是 ( 1 1 )的時候 , 便可得到檔案**現次數不超過2次的所有整數
給兩個檔案,分別有100億個query,我們只有1g記憶體,如何找到兩個檔案交集?分別給出精確演算法和 近似演算法精確演算法: 使用雜湊切割的思想
1024位元組=1kb
1024kb = 1mb
乙個query大約有20bytes , 那麼100億個query大約有200g記憶體 , 我們將200g記憶體分成1000份 , 每份大約200mb
將兩個檔案劃分為1000分小檔案 , 求出每個小檔案的交集 , 然後再整合成出所有的交集
近似演算法: 使用布隆過濾器 , 將乙個檔案中的元素全部對映到位圖中 , 然後用取第二個檔案進行一次比較 , 找出交集部分 , 但是該方法得出來的交集存在著不準確性 , 有可能不相同的元素對映的相同的位
如何擴充套件bloomfilter使得它支援刪除元素的操作?布隆的刪除和計數可歸為一類問題,原本布隆是乙個元素對映到多個位置上,這個位置上的值是乙個key,現在將其改為資料存在的個數,每當對映到相同的位置,該位置上的數進行加1,最後每個位置上的值表示出現某一元素對映到該位的次數(引用計數)
海量資料面試題
海量資料面試題 1 給個超過100g的logfile,log中存著ip位址,設計演算法找到出現次數最多的ip位址?第一題 首先我們的思路就是利用雜湊進行檔案的切分,我們把100g大小的logfile分為1000份,那麼下來差不多沒乙個檔案就是100m左右,然後再利用雜湊函式除留餘數的方法分配到對應的...
海量資料面試題
方案1 可以估計每個檔案安的大小為50g 64 320g,遠遠大於記憶體限制的4g。所以不可能將其完全載入到記憶體中處理。考慮採取分而治之的方法。s 遍歷檔案a,對每個url求取clip image002,然後根據所取得的值將url分別儲存到1000個小檔案 記為clip image004 中。這樣...
海量的資料面試題
1 給個超過100g的logfile,log中存著ip位址,設計演算法找到出現次數最多的ip位址?第一題 首先我們的思路就是利用雜湊進行檔案的切分,我們把100g大小的logfile分為1000份,那麼下來差不多沒乙個檔案就是100m左右,然後再利用雜湊函式除留餘數的方法分配到對應的編號檔案中,然後...