1.給乙個超過100g大小的log file, log中存著ip位址,設計演算法找到出現次數最多的ip位址?
思路:首先,對於乙個超過100g大小的log file,現在來說肯定是進入不了記憶體的,要想找出在這個檔案中出現次數最多的ip,必須對於這個檔案進行切分;
(1)先將這超過100g大小的log file 切分成 100個檔案;
(2)使用字串雜湊演算法,對於檔案中的字串進行計算,讓相同的ip進入同乙個的 檔案;
(3)分別找到這100個檔案中,出現次數最多的ip;
(4)對於這100個ip,進行查詢,就很容易的找出:出現次數最多的ip;
2.與上題條件相同,如何找到top k的ip?
思路:與上題一樣,對於處理超過100g大小的檔案,還是先要進行切分;
(1)(2)同上;
(3)分別找出這100個檔案中的top k的ip;
(4)將找到的所有ip建立乙個小堆,從而就可以找出top k的ip;
3.給定100億個整數,設計演算法找到只出現一次的整數.
思路:首先對於100億個整數,大概就是37.25gb,全部載入到記憶體處理,現在看來還不行,因此我們可以進行切分:將100億個整數,切分為100份,每份大約為381.5mb;
(1)對於每份檔案用雜湊表儲存,找到每份中只出現一次的整數;
(2)對於100份檔案中所有出現一次的數字合併在一塊,就可以得到100億個整數中只 出現一次的所有整數;
4.給兩個檔案,分別有100億個整數,我們只有1g記憶體,如何找到兩個檔案交集.
思路:和上題一樣,100億個整數,而我們只有1g的記憶體,所以全部載入到記憶體是非常不現實的;因此,我們還是要將這兩個檔案分別進行切分的;
(1)將第乙個檔案切分100份,根據合適的雜湊函式讓相等的數都進入同乙個檔案中,並且對於檔案進行編號;
(2)將第二個檔案切分100份,用和切分檔案一相同的雜湊函式進行切分讓相等的數都進入同乙個檔案,並且對於這100份檔案進行編號;
(3)通過(1)(2)的處理,那麼檔案相同的部分必然出現在編號相同的檔案中;
(4)同時將兩個檔案中編號相同的檔案載入到記憶體中,將兩個檔案進行對比,可以分別找出這100對檔案中相同的;
(5)對於100對中找出來相同的部分進行合併,即可找到:這兩個檔案中的交集;
5.1個檔案有100億個int,1g記憶體,設計演算法找到出現次數不超過2次的所有整數.
思路:對於這100億個數,總共有3種狀態:(1)這個數出現了一次;(2)這個數出現了二次;(3)這個數出現了多次;由於這些資料為整數,可以用位圖進行儲存資料這些狀態,然後進行查詢,找出出現次數不超過2次的所有整數;
(1)建兩個檔案,設定乙個值key,大於這個key的數進入第乙個檔案;小於key值的數進入第二個檔案(設定的key盡量使得這兩個檔案中數的數目是差不多的);
(2)將第乙個檔案中的所有數的狀態存到乙個點陣圖中(乙個資料有三種狀態,所以乙個數字用兩個bit位來存放,而且(1)的分割選擇乙個是兩個檔案大小差不多的key,所以第乙個檔案以位圖儲存大約需要9540多mb的記憶體),然後通過查詢,找出檔案一中出現次數不超過兩次的所有整數;
(3)對於檔案二,使用和檔案一相同的方法;
(4)將兩個檔案所找到的所有整數合併,便可以找到這100億個int 中出現次數不超過兩個的整數。
大資料之資料結構例析(二)
1.給兩個檔案,分別有100億個query,我們只有1g記憶體,如何找到兩個檔案交集?分別給出精確演算法和近似演算法 精確的演算法 對於這兩個檔案,分別進行切分 將檔案一切分為100份 每個檔案大概380多mb 用合適的雜湊函式將資料進行處理,讓經過雜湊函式後結構相同的數進入同乙個檔案,並且對檔案進...
資料結構 大數階乘
問題描述 大數運算 計算n的階乘 n 20 基本要求 1 資料的表示和儲存 1.1 累積運算的中間結果和最終的計算結果的資料型別要求是整型 這是問題本身的要求 1.2 試設計合適的儲存結構,要求每個元素或結點最多儲存資料的3位數值。2 資料的操作及其實現 基於設計的儲存結構實現乘法操作,要求從鍵盤上...
大資料結構解析
結構大資料報括結構化 半結構化和非結構化資料,非結構化資料越來越成為資料的主要部分。據idc的調查報告顯示 企業中80 的資料都是非結構化資料,這些資料每年都按指數增長60 大資料就是網際網路發展到現今階段的一種表象或特徵而已,沒有必要神話它或對它保持敬畏之心,在以雲計算為代表的技術創新大幕的襯托下...