C 演算法之海量資料處理方法的總結分析

2021-08-16 21:02:39 字數 1114 閱讀 3983

海量資料處理中常用到的技術 

1. bloom filtering

基本的bloom filtering支援快速的插入和查詢操作,是一種hash表技術。基本的資料結構非常簡單,容量為m的位陣列,k個hash函式,將輸入的n個元素儲存在位陣列裡面。

每次插入乙個新的元素,先計算該元素的k個hash指,將位陣列對應hash值位置為1. 查詢某個元素時,同樣的先計算k個hash值,然後查詢看是否對應位陣列中得k位是否都是1,是則斷定元素存在。

基本的bloom filtering演算法可以用於允許誤差的快速判重操作。集合的交集、並集的計算。

bloom filtering有個改進的版本counting bloom filtering可以支援資料的刪除操作,countering bloom filtering和基本的bloom filtering相比,位陣列中每一位的取值擴充套件成多位,基本的bloom filtering用1bit表示一位。插入乙個元素時,所有的k位都加1,刪除時都減1,查詢時如果k個值都大於0則判定為存在。cbf中有個很重要的引數,即每一位的位數為多少。可以通過理論證明,位數一般取4就足夠了,可以支援同乙個資料插入16次。

bitmap可以看做bloom filtering的特例

2. hash表技術

d-left hash hash表負載均衡技術。將hash表分成d段,設計d個hash函式,更具負載選擇乙個合適的段存放資料。查詢時要計算d個hash值,分別在d段中找。

常用於統計次數。

3. 堆技術

堆有兩個典型的應用:

多路歸併排序

求topk

多路歸併排序時,降序排序時用最大堆,公升序排序用最小堆。

topk時,求topk最大時,用最小堆,求topk最小時用最大堆。求topk最大時,利用最小堆堆維護k個值,當新掃瞄的值大於堆頂元素時,堆頂元素刪除,插入新的值。這樣掃瞄完一遍資料,既可以求得topk最大。

4. 雙層桶(多層桶)設計

hash表技術是一種direct addr 技術,但是當資料範圍分布過廣、且資料量非常大的時候,採用hash表直接direct addr技術就不行了,這是可以使用多層hash技術。將原始資料範圍分成小段,每一段記憶體可以裝載,段內可以使用direct addr table技術。可以用多層分級快速定位到小段。

海量資料處理方法總結

適用範圍 第k大,中位數,不重複或重複的數字 基本原理及要點 因為元素範圍很大,不能利用直接定址表,所以通過多次劃分,逐步確定範圍,然後最後在乙個可以接受的範圍內進行。可以通過多次縮小,雙層只是乙個例子。擴充套件 問題例項 1 2.5億個整數中找出不重複的整數的個數,記憶體空間不足以容納這2.5億個...

演算法之海量資料處理

1.雜湊 分治 尋找共同的url 給定兩個a和b檔案,各存放50億個url,每個url佔64位元組,記憶體限制4gb,請找出a和b檔案中共同的url。乙個檔案的記憶體 5 000 000 000 64 320gb,每個檔案可以分為100個小檔案,每個檔案大約是3.2gb。1000萬個字串去重 假設每...

海量資料處理分析總結

海量的資料處理問題,對其進行處理是一項艱鉅而複雜的任務。原因有以下幾個方面 一 資料量過大,資料中什麼情況都可能存在。如果說有10條資料,那麼大不了每條去逐一檢查,人為處理,如果有上百條資料,也可以考慮,如果資料上到千萬級別,甚至過億,那不是手工能解決的了,必須通過工具或者程式進行處理,尤其海量的資...