Spectral Bloom Filter (4)

membership query上,由於SBFCBF都沿用bloom filter的基本結構,因此很難在membership query上提高查詢效率。但在查詢元素出現頻率(大於1的情況)時,由於SBF採用counter中的最小值來近似表示元素的出現頻率,使得各個counter的重要性有所差別,因此CBFcounter一視同仁的做法就有提高的空間。

 

先來看第一種優化算法Minimal Increase。這種算法的思想比較簡單,從它的名字大家也能猜出個大概。它的基本思想是:既然在查詢元素出現頻率時我們只關心counter的最小值,那在增加元素時我們就只增加最小值。如果有多個counter都是最小值,把它們都增加;如果連續加入r個相同的元素,就把最小值(一個或多個counter)加r,其它counter的值或者維持不變,或者設爲最小值加r,看哪一個比較大。這種算法是一種聰明的偷工減料:原來增加一個元素時要增加k(哈希函數個數)個counter,現在只需要增加最小值。而counter的增加次數一旦減少,就意味着hashing時碰撞的次數減少,因此查詢元素出現頻率時出錯的可能性也就隨之降低。經論文作者證明,Minimal Increase使查詢錯誤率降低了k倍。

 

當然,偷工減料不可能只有好處。Minimal Increase最大的弊端就是不支持刪除操作。很明顯,由於增加元素時增加的counter不確定,因此刪除元素時也無從下手。如果將kcounter都減少,就會造成false negative的出現(查詢結果表明集合不包含某元素而實際上包含)。由於這個嚴重的弊端,Minimal Increase的應用前景被大打折扣。

 

下面我們來看一種既支持增刪操作又降低查詢錯誤率的算法Recurring Minimum。這種算法的基本思想是:發現有可能出錯的情況,然後將它們單獨處理。先解釋一下什麼是recurring minimumSBF中如果一個元素對應的kcounter中有一個以上都維持最小值,就稱它有recurring minimumRM)。我們發現沒有RM(即single minimum)的元素出現查詢錯誤的概率很高,而有RM的元素錯誤概率很低。因此這種算法將沒有RM的元素單獨處理,在主SBF之外又增加了一個輔助的SBF,專門用來存儲這類元素。由於這類元素所佔比例不會太大,因此輔SBF可以只分配較小的空間,比如主SBF的一半大小。

 

採用Recurring Minimum增加元素x時,先將x在主SBF對應的kcounter的值增加,然後再判斷這kcounter有沒有recurring minimum。如果有,就當什麼事都沒有發生,直接繼續;如果沒有,就意味着x出錯的概率很大,這時我們將x存儲在輔SBF上,counter的值設爲x在主SBF對應counter的最小值。刪除元素和上面的操作類似,由於主SBF沒有受算法的影響,所以不會出現false negative。在查詢一個元素時,先看它在主SBF中有沒有recurring minimum。如果有,就返回counter的最小值;否則檢查輔SBF中的counter最小值,如果大於0就返回這個值,否則返回主SBF的值。

 

由於有recurring minimum的情況本來出錯概率就很小,而沒有recurring minimum的情況又單獨處理,也大大降低了出錯概率,所以整個算法的錯誤率得以降低。Recurring Minimum算法的錯誤率雖然不及Minimum Increase,但比原來的錯誤率要好很多,可以說是用更多的空間換取了錯誤率的大幅降低。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章