大資料演算法題(一)

來源:互聯網
上載者:User

標籤:

分類:海量資料處理面試題

1.海量日誌資料,提取出某日訪問百度次數最多的那個IP。

  首先是這一天,並且是訪問百度的日誌中的IP取出來,逐個寫入到一個大檔案中。注意到ip是32位的,最多有個2^32個ip。同樣可以採用映射的方法,比如模1000,把整個大檔案對應為1000個小檔案,在找出每個小檔案中出現頻率最大的ip(可以採用hash_map進行頻率統計,然後再找出頻率最大的幾個)及相應的頻率。然後再在這1000個最大的ip中,找出那個頻率最大的ip,即為所求。

或者如下闡述:

  演算法思想:分而治之+Hash

1.IP地址最多有2^32=4G種取值情況,所以不能完全載入到記憶體中處理;

2.可以考慮採用“分而治之”的思想,按照IP地址的hash(ip)%1024,把海量IP日誌分別儲存到1024個小檔案中。這樣,每個小檔案最多包含4MB個IP地址;

3.對於每個小檔案,可以構建一個ip為key,出現次數為value的Hash map,同時記錄當前出現次數最多的那個ip地址;

4.可以得到1024個小檔案中的出現次數最多的ip,再依據常規的排序演算法得到總體上出現次數最多的ip;

2.搜尋引擎會通過記錄檔把使用者每次檢索使用的所有的檢索串都記錄下來,每個查詢串的長度是1-255位元組;

  假設目前有一千萬個記錄(這些查詢串的重複讀比較高,雖然總數是一千萬,但如果出去重複後,不超過3百萬個。一個查詢串的重複度越高,說明查詢它的使用者越多,也就是越熱門。)請你統計最熱門的10個查詢串,要求使用的記憶體不能超過1g。

第一步、先對這批海量資料預先處理,在O(N)的時間內用Hash表完成統計。

第二步,藉助堆這個資料結構,找出Top K,時間複雜度為Nlogk.

即,藉助堆結構,我麼可以在log量級的時間內尋找和調整/移動。因此,維護一個K(該題目中是10)大小的小根堆,然後遍曆300萬的query,分別和根項目進行對比所以,我們最終的時間複雜度是:o(N)+n`*o(logk),(N為1000萬,N·為300萬)。

或者,採用trie樹,關鍵字域存該查詢串出現的次數,沒有出現為0.最後用10個元素的最大堆來對出現的頻率進行排序。

 

大資料演算法題(一)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.