布隆過濾器和海量資料面試題

2021-08-28 08:52:21 字數 1243 閱讀 7628

給乙個超過100g大小的logfile,log中存著ip位址,設計演算法找到出現次數最多的ip位址,與上題條件相同,如何找到topk的ip?如何直接用linux系統命令實現?

(1)topk的ip

思路:使用堆

(2)尋找次數最多

思路:分割成多個檔案,分別多每個檔案進行統計,統計方式用hash,ip為key,次數為value,然後就可以統計出每個ip出現的次數,然後再比較出出現次數最大的。

如果是找前k個出現次數最多的ip,就把出現的次數作為堆用來比較的的key,ip位址作為value,把剛剛用雜湊統計好的次數,建立儲存資料一定的小堆(用其中乙個檔案先建立乙個topk堆,然後再用其他檔案中的資料替換插入),出現次數多的都在堆裡,然後根據次數對應的找到ip。

思路:分割為多個檔案,兩個為位元位表示出現的次數

給兩個檔案,分別有100億個整數,我們只有1g記憶體,如何找到兩個檔案交集

分割多個檔案,編號相同的檔案比較,乙個位元位表示是否出現

1乙個檔案有100億個int,1g記憶體,設計演算法找到出現次數不超過2次的所有整數

位圖(兩個位元位表示乙個資料)

給兩個檔案,分別有100億個query(字串),我們只有1g記憶體,如何找到兩個檔案交集?分別給出精確演算法

思路:思路的第一步都是先把兩個檔案分割成很多檔案,然後每個編號相同的檔案比較。

為什麼使用布隆過濾器:字串轉化整形數字,兩個字串可能都轉化為了同乙個整形資料,這樣單純的點陣圖就無法解決

近似演算法:布隆過濾器,用不同的計算方法,讓query對映多個位圖(對應多個位元位),讓多個點陣圖中對應的位置都置1,找的時候通過query再次去找所有位圖對應的位置是否全為1,如果都是1就可能存在,如果有乙個不為1,就說明一定不在。(缺點:不能作刪除操作)

精確演算法:使用雜湊(閉雜湊法和開鏈法):轉化的整數為key,query為value,尋找的時候有兩個比對條件,這樣就比較精確了。

思考:如何擴充套件bloomfilter使得它支援刪除元素的操作?

思路:把每個位被對映的次數用乙個變數記錄起來,刪除的時候就減一即可。(不過這樣做還是在增加了不少記憶體,感覺不太實用)

如何擴充套件bloomfilter使得它支援計數操作?

思路:弄乙個變數計數唄,這變數放哪呢

給上千個檔案,每個檔案大小為1k-100m,給n個詞,設計演算法對每個詞找到所有包含它的檔案

思路:精確方法:在hash表中載入每個檔案吧,hash的key用詞轉化的整形,然後用整形對映詞的位置,如果有雜湊衝突就用方法解決,然後在用n詞去匹配是檔案中否存在這個詞。

布隆過濾器

布隆過濾器 bloom filter 是1970年由布隆提出的。它實際上是乙個很長的二進位制向量和一系列隨機對映函式。布隆過濾器可以用於檢索乙個元素是否在乙個集合中。它的優點是空間效率和查詢時間都遠遠超過一般的演算法,缺點是有一定的誤識別率和刪除困難。如果想要判斷乙個元素是不是在乙個集合裡,一般想到...

布隆過濾器

布隆過濾器的概念 如果想要判斷乙個元素是不是在乙個集合裡,一般想到的是將所有元素儲存起來,然後通過比較確定。鍊錶,樹等等資料結構都是這種思路.但是隨著集合中元素的增加,我們需要的儲存空間越來越大,檢索速度也越來越慢 o n o logn 不過世界上還有一種叫作雜湊表 又叫 雜湊表,hash tabl...

布隆過濾器

如果想判斷乙個元素是不是在乙個集合裡,一般想到的是將集合中所有元素儲存起來,然後通過比較確定。鍊錶 樹 雜湊表 又叫雜湊表,hash table 等等資料結構都是這種思路。但是隨著集合中元素的增加,我們需要的儲存空間越來越大。同時檢索速度也越來越慢。bloom filter 是一種空間效率很高的隨機...