1. 程式人生 > >雜湊在元素包含測試中的應用

雜湊在元素包含測試中的應用

Andrew Zhang
Nov 16, 2017

1、counting bloom filter

counting bloom filter可以解決bloom filter無法刪除元素的問題。但是布隆過濾器會因為負載不均衡,浪費很多空間。

2、d-left雜湊

以2-left為例,採用兩個hash表,T1和T2,分別對應兩個hash函式,h1和h2。儲存一個key時,分別用兩個hash函式h1和h2計算兩個位置h1[key]和h2[key],然後看看兩個hash table對應位置有沒有空,只要任意一個有空就可以將此key放在對應位置。當採用d對hash表和hash函式時就是d-left雜湊。
d-left雜湊可以減輕布隆過濾器的負載均衡問題,使得資源利用趨於平衡。

3、cuckoo hash

採用d個雜湊函式,當插入一個元素的時候,若d個位置有空,任選一個插入,否則在d個位置中隨便找一個,踢走,對被踢走的key,進行重新hash插入,如果被踢走的key的d個hash位置也是全滿了,繼續踢。。。

4、cuckoo filter

結合cuckoo hash和d-left hash的思路,將資源劃分為兩塊,每一塊採用不同的雜湊函式。對於一個插入的key,在這兩塊尋找空的位置插入,若沒空就嘗試cuckoo思想,踢走,重雜湊。cuckoo filter一個改進是在filter中儲存的是資訊壓縮後的指紋,並且重雜湊的時候根據儲存的指紋就能找到另一個地址。


f = f i n g e r p r

i n t ( k e y )
p o s 1 = h a s h 1 ( k e y )
p o s 2 = p o s 1 f


參考論文:
Cuckoo Filter: Practically Better Than Bloom