海量資料處理題目小結

2021-08-11 02:13:50 字數 1353 閱讀 1999

解決這類題目的思路一般為

(1)能否用特殊的資料結構解決:位圖,布隆,堆。

(2)雜湊切分

1。給乙個超過100g大小的log file, log中存著ip位址, 設計演算法找到出現次數最多的ip位址

思路分析:

1.要進行雜湊切分編號,log file可以看做是字串,利用雜湊字串轉換演算法進行轉換,轉換成整型後,利用雜湊函式進行對映,同一ip位址肯定對映到同一編號中,

2.這裡我們使用效率很快的雜湊表,進行此數的統計,就可以找出出現此數最多的ip位址

2.與上題條件相同,如何找到top k的ip?如何直接用linux系統命令實現?

思路分析:

要找到topk的ip位址,如果直接進行排序的話,記憶體放不下,而且效率太慢,所以這我們可以建乙個k大小的堆,這裡建小堆比較好,因為來乙個數和進行堆頂的元素進行比較,然後進行向下調整,大的就下去了,因此最終統計的就是topk

3。給兩個檔案,分別有100億個query,我們只有1g記憶體,如何找到兩個檔案交集?分別給出精確 演算法和近似演算法!

思路分析:

1。檔案進行比較,用位圖顯然不能解決

2。肯定要進行雜湊切分,我們將兩個檔案分別切分為1000個檔案,先對檔案a分的1000個檔案裡的整數進行雜湊分配,即取出來整數模除1000,使相同的整出進入相同的檔案,檔案b切分的1000個檔案進行同樣的處理,然後分別拿a雜湊切分好的第乙個檔案和b雜湊切分好的第乙個檔案對比,找出交集存到乙個新檔案中,依次類推,直到2000個檔案互相比較完。

4)給上千個檔案,每個檔案大小為1k—100m。給n個詞,設計演算法對每個詞找到所有包含它的檔案,你只有100k記憶體!

1。用乙個檔案info 準備用來儲存n個詞和包含其的檔案資訊。

2。首先把n個詞分成x份。對每乙份用生成乙個布隆過濾器(因為對n個詞只生成乙個布隆過濾器,記憶體可能不夠用)。把生成的所有布隆過濾器存入外存的乙個檔案filter中。

3。將記憶體分為兩塊緩衝區,一塊用於每次讀入乙個布隆過濾器,乙個用於讀檔案(讀檔案這個緩衝區使用相當於有界生產者消費者問題模型來實現同步),大檔案可以分為更小的檔案,但需要儲存大檔案的標示資訊(如這個小檔案是哪個大檔案的)。

4。對讀入的每乙個單詞用記憶體中的布隆過濾器來判斷是否包含這個值,如果不包含,從filter檔案中讀取下乙個布隆過濾器到記憶體,直到包含或遍歷完所有布隆過濾器。如果包含,更新info 檔案。直到處理完所有資料。刪除filter檔案。

5)有乙個詞典,包含n個英文單詞,現在任意給乙個字串,設計演算法找出包含這個字串的所有英文單詞!

可以用kmp演算法或者字典樹

海量資料處理 題目

問題例項 給你a,b兩個檔案,各存放50億條url,每條url占用64位元組,記憶體限制是4g,讓你找出a,b檔案共同的url。如果是三個乃至n個檔案呢?根據這個問題我們來計算下記憶體的占用,4g 2 32大概是40億 8大概是340億,n 50億,如果按出錯率0.01算需要的大概是650億個bit...

海量資料處理

1 有一千萬條簡訊,有重複,以文字檔案的形式儲存,一行一條,有 重複。請用5分鐘時間,找出重複出現最多的前10條。方法1 可以用雜湊表的方法對1千萬條分成若干組進行邊掃瞄邊建雜湊表。第一次掃瞄,取首位元組,尾位元組,中間隨便兩位元組作為hash code,插入到hash table中。並記錄其位址和...

海量資料處理

給定a b兩個檔案,各存放50億個url,每個url各占用64位元組,記憶體限制是4g,如何找出a b檔案共同的url?答案 可以估計每個檔案的大小為5g 64 300g,遠大於4g。所以不可能將其完全載入到記憶體中處理。考慮採取分而治之的方法。遍歷檔案a,對每個url求取hash url 1000...