[原創] 學習筆記:海量數據處理總結

  本文簡要總結了一下海量數據處理的常見方法和思路。總結的比較粗糙,主要做爲知識提綱使用。請各位高手不吝賜教。算法

  另外,最近在BAE上學習用 WordPress 搭建了獨立博客,歡迎你們有空去轉轉!本博客文章將同步更新。數組

  博客地址:http://panwenhai.duapp.com/app

  

一、海量數據處理整體思路:分配任務、單獨解決、合併結果
  • 分配任務:
    • 分而治之Hash
    • 桶劃分思想
  • 單獨解決:
    • 統計各個元素出現的次數:Hash Map,N-Bit Map,Trie-Tree,倒排索引
    • 找尋最大(小)的N個元素:堆結構,快排思想,局部淘汰法
    • 查找給定元素是否存在在其中:Hash Map,1-Bit Map,Bloom Filter,高位比較
    • 尋找中位數:桶劃分思想
    • 搜索引擎,查找關鍵字:倒排索引
  • 合併結果:
    • 一、歸併排序思想合併
    • 二、桶劃分思想合併
二、分而治之+Hash
  • 經過Hash取模的方法( Hash(ip)%1024 ),將大量數據分紅一個一個的小文件,再進行處理(內排序)。
  • Hash取模的方法,使得相同的元素,會被分配到相同的文件中,對於單獨文件操做,就能夠獲得對應元素的結果。
  • 處理以後,採用歸併的方法,對於小文件的結果進行合併,從而獲得最終結果(外排序)。
  • 當數據量較大,而又必須進行完全的處理時,能夠採用這種思想
 
三、Hash Map
  • 經過一次掃描,能夠創建Key與Value對的hash表,來統計某個元素出現的次數。
 
四、N-Bit Map 位圖方法
  • 與 Hash Map 類似,只是Key一般爲元素值進行直接索引,value值爲bit串,用來記錄某個元素的狀態。
  • N的大小控制bit串長度,用來控制狀態的總數。(如:N=2時,00表示不存在,01表示出現一次,10表示出現屢次,11無心義)
  • Bit Map 自己的長度,表示可記錄元素的個數
  • 當N = 1,採用元素值做爲地址直接索引時,能夠表示40億個不重複的unsigned int值是否存在。
 
五、Bloom Filter
  • 有必定錯誤機率,但相比於單純的bit_set節省空間。
  • bit_set + k個獨立hash函數:將hash函數的結果做爲索引值,將對應位置1。查找元素時,若是發現K個hash函數所獲得的位置都是1,則認爲對應元素存在。
  • 輸入元素個數n,肯定位數組m的大小及hash函數個數
    • m應該>=nlg(1/E)*lge
    • k=(ln2)*(m/n)
  • Bloom Filter:元素 映射爲  位數組
  • Counting Bloom Filter:在Bloom filter 中的位擴展爲 counter,支持刪除操做。
  • Spectral Bloom Filter:將元素與出現次數關聯。
 
六、堆結構
  • 經過堆的特性,找尋出現最多(少)的前N個元素。
  • 須要先統計出各個元素出現的次數(能夠用Hash Map),這一步只是找前N個。
  • 找最多,用小頂堆,找最大,用大頂堆(先比較堆頂元素,若是不知足要求,則直接輪詢下一個,若是符合要求,插入堆中)
  • 時間複雜度O(X log Y),X爲全部元素的個數,Y爲堆中元素的個數
  • 擴展:雙堆,一個大頂堆和一個小頂堆,能夠用來維護中位數。大頂堆存儲較小的一半數字,小頂堆存儲較大的一半數字。每次插入元素後,適當移動根節點保持兩個堆數字相等或相差1.
 
七、Trie 樹
  • 前綴樹,統計各個單詞出線的次數。
  • 每一個節點都是一個字母,前綴相同的,就不新建節點了。節點的內容是這個單詞出現的次數。
  • 時間複雜度: O(n*le)(le表示單詞的平準長度)
 
八、快排思想找前N個元素
  • 利用快速排序思想,每次分割時,僅考慮知足要求的一些,當接近N時,採用普通排序算法排序。
 
九、局部淘汰法找前N個元素
  • 從全部數據中,選取前N個元素,排序。而後掃描剩餘元素,與排好序的最後一個元素相比,若是比它小(大),則刪除最後一個元素,利用插入排序法的思想插入序列中。
  • 時間複雜度:O(100w*100)
 
十、MapReduce思想
  • 在用分而治之hash分配任務後,並不一個一個文件進行處理,而是採用分佈式的方法,同時處理多個文件,在處理以後,再進行合併。
 
十一、桶劃分
  • 本質上是分而治之,重在「分」的技巧
  • 劃分元素的取值範圍,將落在一個範圍內的元素分紅一組
  • 單獨處理每一組的元素,最終合併結果
  • 如:找中位數,將int劃分紅2^16個區域,統計在各個區域內的數字個數,就能夠判斷出在哪一個區域的第幾個元素就是中位數。而後對那個區域內的元素排序便可得到
 
十二、高位比較
  • 從不少數中,查找某一個數字是否出現過。
  • 由最高位開始比較,0,1二分,以後依次類推。近似於折半查找。O(logn)
 
1三、倒排索引
  • 單詞做爲索引,單詞出現的位置所組成的集合作爲內容。
  • 搜索引擎,關鍵字查詢,查找那些文件包含了對應關鍵字。

 

謝謝您閱讀本文!做者獨立博客地址:http://panwenhai.duapp.com/,歡迎你們有空去轉轉!分佈式

相關文章
相關標籤/搜索