1. 程式人生 > >【面試題】海量資料處理相關

【面試題】海量資料處理相關

海量資料處理思路

  • 針對時間,可以採用巧妙的演算法搭配合適的資料結構,如Bloom filter/Hash/bit-map/堆/資料庫或倒排索引/trie/,

  • 針對空間,無非就一個辦法:大而化小:分而治之/hash對映,

  • 處理海量資料的幾種方法

    • 分而治之/hash對映 + hash統計 + 堆/快速/歸併排序;
    • 雙層桶劃分;
    • Bloom filter/Bitmap;
    • Trie樹/資料庫/倒排索引;
    • 外排序;
    • 分散式處理之hadoop/mapreduce。
    • simhash 演算法;
    • 布隆過濾器;

Trie 樹

  • Trie樹,即字典樹,又稱單詞查詢樹或鍵樹,是一種樹形結構。

  • 典型應用是用於統計和排序大量的字串(但不僅限於字串),所以經常被搜尋引擎系統用於文字詞頻統計。它的優點是最大限度地減少無謂的字串比較,查詢效率比較高。

  • Trie 的核心思想是空間換時間,利用字串的公共字首來降低查詢時間的開銷以達到提高效率的目的。

  • Trie 的3 個基本性質

    • 根節點不包含字元,除根節點外每一個節點都只包含一個字元。
    • 從根節點到某一節點,路徑上經過的字元連線起來,為該節點對應的字串。
    • 每個節點的所有子節點包含的字元都不相同。
  • 倒排索引((Inverted index))是一種索引方法,被用來儲存在全文搜尋下某個單詞在一個文件或者一組文件中的儲存位置的對映,常被應用於搜尋引擎和關鍵字查詢的問題中。

海量資料處理例項

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

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

  • 具體實現:先按照IP地址的Hash(IP)%1024值,把海量IP日誌分別儲存到1024個小檔案中。這樣,每個小檔案最多包含4MB個IP地址,然後對於每一個小檔案,可以構建一個IP為key,出現次數為value的Hash map,同時記錄當前出現次數最多的那個IP地址;可得到1024個小檔案中的出現次數最多的IP,最後依據常規的排序演算法得到總體上出現次數最多的IP

2.搜尋引擎會通過日誌檔案把使用者每次檢索使用的所有檢索串都記錄下來,每個查詢串的長度為1-255位元組,統計最熱門的10個查詢串,要求使用的記憶體不能超過1G。

  • 演算法思想:hash對映+hash統計+排序

  • 具體實現:先對這批海量資料預處理,存入hashmap(Query,Value),Query表示字串,而Value表示該Query出現次數的HashTable,每次讀取一個Query,如果該字串不在Table中,那麼加入該字串,並且將Value值設為1;如果該字串在Table中,那麼將該字串的計數加一即可,最終用Hash表完成了統計,O(n),最後進行堆/歸併排序。

3.一個文字檔案,大約有一萬行,每行一個詞,要求統計出其中出現次數最頻繁的10 個詞

  • 演算法思想:利用trie樹

  • 具體實現:用trie 樹統計每個詞出現的次數,時間複雜度是O(n  le)(le 表示單詞的平均長度),然後是找出出現最頻繁的前10 個詞。當然,也可以用堆來實現,時間複雜度是O(n lg10)。總的時間複雜度,是O(nle)與O(nlg10)中較大的一個。

未完待續…….