假設現有海量資料,例如10億個字元
理想容器:該容器儲存思想仍為點陣圖。但卻可以儲存字元,且可以處理雜湊衝突。
在之前的雜湊表編寫中,雜湊擁有乙個函式,該函式可以自動識別儲存內容。實際的底層實現為:將不同型別轉換為整形。
雜湊轉換演算法有很多種,其效果就是將乙個字串轉換為乙個整形的值返回,例如下面的:
struct hashstr1
return hash;}}
;struct hashstr2
return hash;}}
;struct hashstr3
return hash;}}
;
在實際編寫中,雜湊衝突問題是無法完全解決的,布隆過濾器使用的是多位對映,降低衝突的方法。
即:使用多個雜湊演算法運算乙個儲存字串,得到若干個對映位,將這若干個對映位共同作為該資料的儲存特徵。
對於雜湊函式數量的選擇,通常要根據不同情況確定,可參考公式:
// 位圖
size_t _n;};
}
資料結構 雜湊的應用之布隆過濾器
上篇部落格我們講到了點陣圖 bitmap 雜湊應用之位圖 但是位圖不是萬能的,如我們需要儲存的64bit型別的資料,還能不能用bitmap?我們來算一算 eb exabyte,艾位元組 這個電腦科學中統計資料量的單位有多大,有興趣的小夥伴可以查閱下資料。這個量級的bitmap,已經不是人類硬體所能承...
資料結構 布隆過濾器
基於位圖的缺點 只能儲存整型,在現實中的應用有了很大的侷限性,所以又引出了一種新的雜湊變形,其實也算是點陣圖的變形 布隆過濾器。如圖,把字串經過布隆過濾器的處理,對映到位圖的多個位置,讓這幾個位置都置成1用來表示這個字串的存在。所以只要有乙個位置為0,那麼這個資料就不存在。1.本來不存在的資料,可能...
資料結構 布隆過濾器
原理 如果要判斷乙個數是不是在乙個集合裡,一半想到的是將所有的元素儲存起來,然後通過比較確定。但是隨著集合中元素的增加,需要的儲存空間越來越大,檢索速度自然會變慢。這時會有人想到使用雜湊表,將元素通過雜湊函式對映到乙個位陣列中,將相應的位元位置為1,這樣就可以判斷這個元素是不是在集合之中了。但是雜湊...