海量數(shù)據(jù)處理方法總結_第1頁
已閱讀1頁,還剩6頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、1.給定給定a、b兩個文件,各存放兩個文件,各存放50億個億個url,每個,每個url各占各占64字節(jié),內(nèi)存限制是字節(jié),內(nèi)存限制是4G,讓,讓你找出你找出a、b文件共同的文件共同的url?方案1:可以估計每個文件安的大小為50G64=320G,遠遠大于內(nèi)存限制的4G。所以不可能將其完全加載到內(nèi)存中處理。考慮采取分而治之的方法。s遍歷文件a,對每個url求取,然后根據(jù)所取得的值將url分別存儲到1000個小文件(記為)中。這樣每個小文件的

2、大約為300M。s遍歷文件b,采取和a相同的方式將url分別存儲到1000各小文件(記為)。這樣處理后,所有可能相同的url都在對應的小文件()中,不對應的小文件不可能有相同的url。然后我們只要求出1000對小文件中相同的url即可。s求每對小文件中相同的url時,可以把其中一個小文件的url存儲到hash_set中。然后遍歷另一個小文件的每個url,看其是否在剛才構建的hash_set中,如果是,那么就是共同的url,存到文件里面就

3、可以了。方案2:如果允許有一定的錯誤率,可以使用Bloomfilter,4G內(nèi)存大概可以表示340億bit。將其中一個文件中的url使用Bloomfilter映射為這340億bit,然后挨個讀取另外一個文件的url,檢查是否與Bloomfilter,如果是,那么該url應該是共同的url(注意會有一定的錯誤率)。ps:個人認為方案1中的估計是不是有問題50億就是510的9次方。小于等于52的30次方,即5G,2.有10個文件,每個文件個

4、文件,每個文件1G,每個文件的每一行存放的都是用戶的,每個文件的每一行存放的都是用戶的query,每個文,每個文件的件的query都可能重復。要求你按照都可能重復。要求你按照query的頻度排序。的頻度排序。方案1:s順序讀取10個文件,按照hash(query)%10的結果將query寫入到另外10個文件(記為)中。這樣新生成的文件每個的大小大約也1G(假設hash函數(shù)是隨機的)。s找一臺內(nèi)存在2G左右的機器,依次對用hash_map

5、(queryquery_count)來統(tǒng)計每個query出現(xiàn)的次數(shù)。利用快速堆歸并排序按照出現(xiàn)次數(shù)進行排序。將排序好的query和對應的query_cout輸出到文件中。這樣得到了10個排好序的文件(記為內(nèi)存,還可以接受。然后掃描這2.5億個整數(shù),查看Bitmap中相對應位,如果是00變01,01變10,10保持不變。所描完事后,查看bitmap,把對應位是01的整數(shù)輸出即可。方案2:也可采用上題類似的方法,進行劃分小文件的方法。然后在

6、小文件中找出不重復的整數(shù),并排序。然后再進行歸并,注意去除重復的元素。6.海量數(shù)據(jù)分布在海量數(shù)據(jù)分布在100臺電腦中,想個辦法高校統(tǒng)計出這批數(shù)據(jù)的臺電腦中,想個辦法高校統(tǒng)計出這批數(shù)據(jù)的TOP10。方案1:s在每臺電腦上求出TOP10,可以采用包含10個元素的堆完成(TOP10小,用最大堆,TOP10大,用最小堆)。比如求TOP10大,我們首先取前10個元素調(diào)整成最小堆,如果發(fā)現(xiàn),然后掃描后面的數(shù)據(jù),并與堆頂元素比較,如果比堆頂元素大,那

7、么用該元素替換堆頂,然后再調(diào)整為最小堆。最后堆中的元素就是TOP10大。s求出每臺電腦上的TOP10后,然后把這100臺電腦上的TOP10組合起來,共1000個數(shù)據(jù),再利用上面類似的方法求出TOP10就可以了。7.怎么在海量數(shù)據(jù)中找出重復次數(shù)最多的一個?怎么在海量數(shù)據(jù)中找出重復次數(shù)最多的一個?方案1:先做hash,然后求模映射為小文件,求出每個小文件中重復次數(shù)最多的一個,并記錄重復次數(shù)。然后找出上一步求出的數(shù)據(jù)中重復次數(shù)最多的一個就是所

8、求(具體參考前面的題)。8.上千萬或上億數(shù)據(jù)(有重復),統(tǒng)計其中出現(xiàn)次數(shù)最多的錢上千萬或上億數(shù)據(jù)(有重復),統(tǒng)計其中出現(xiàn)次數(shù)最多的錢N個數(shù)據(jù)。個數(shù)據(jù)。方案1:上千萬或上億的數(shù)據(jù),現(xiàn)在的機器的內(nèi)存應該能存下。所以考慮采用hash_map搜索二叉樹紅黑樹等來進行統(tǒng)計次數(shù)。然后就是取出前N個出現(xiàn)次數(shù)最多的數(shù)據(jù)了,可以用第6題提到的堆機制完成。9.1000萬字符串,其中有些是重復的,需要把重復的全部去掉,保留沒有重復的字符萬字符串,其中有些是重

9、復的,需要把重復的全部去掉,保留沒有重復的字符串。請怎么設計和實現(xiàn)?串。請怎么設計和實現(xiàn)?方案1:這題用trie樹比較合適,hash_map也應該能行。10.一個文本文件,大約有一萬行,每行一個詞,要求統(tǒng)計出其中最頻繁出現(xiàn)的前一個文本文件,大約有一萬行,每行一個詞,要求統(tǒng)計出其中最頻繁出現(xiàn)的前10個詞,請給出思想,給出時間復雜度分析。詞,請給出思想,給出時間復雜度分析。方案1:這題是考慮時間效率。用trie樹統(tǒng)計每個詞出現(xiàn)的次數(shù),時間復

10、雜度是O(nle)(le表示單詞的平準長度)。然后是找出出現(xiàn)最頻繁的前10個詞,可以用堆來實現(xiàn),前面的題中已經(jīng)講到了,時間復雜度是O(nlg10)。所以總的時間復雜度,是O(nle)與O(nlg10)中較大的哪一個。11.一個文本文件,找出前一個文本文件,找出前10個經(jīng)常出現(xiàn)的詞,但這次文件比較長,說是上億行或十億個經(jīng)常出現(xiàn)的詞,但這次文件比較長,說是上億行或十億行,總之無法一次讀入內(nèi)存,問最優(yōu)解。行,總之無法一次讀入內(nèi)存,問最優(yōu)解。方

11、案1:首先根據(jù)用hash并求模,將文件分解為多個小文件,對于單個文件利用上題的方法求出每個文件件中10個最常出現(xiàn)的詞。然后再進行歸并處理,找出最終的10個最常出現(xiàn)的詞。12.100w個數(shù)中找出最大的個數(shù)中找出最大的100個數(shù)。個數(shù)。方案1:在前面的題中,我們已經(jīng)提到了,用一個含100個元素的最小堆完成。復雜度為O(100wlg100)。方案2:采用快速排序的思想,每次分割之后只考慮比軸大的一部分,知道比軸大的一部分在比100多的時候,采

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論