go實現布隆過濾器

2022-09-14 23:42:28 字數 1565 閱讀 9776

布隆過濾器一般用來判斷乙個資料是否在乙個很大的資料集合裡面。當然可以用陣列,集合,樹等資料結構和各種查詢法都可以做同樣的事情,但是布隆過濾器有更好的時間效率和空間效率。位元幣實現spv節點時使用了布隆過濾器來查詢交易。布隆過濾器可以判斷乙個數在不在集合裡,但存在一定的誤判率。

布隆過濾器的核心是乙個超大的位陣列和幾個雜湊函式。假設位陣列的長度為m,雜湊函式的個數為k。

以上圖為例,在這裡維陣列長度為18,雜湊函式個數為3個。首先將維陣列所有位全部置0。集合中有的3個資料x,y,z,通過3個雜湊函式對每乙個資料進行計算,得到該資料的雜湊值,這個雜湊值對應維陣列上面的乙個點,然後將對應位陣列的位置1。這樣3個資料會生成9個點。對於另外乙個資料w,查詢它 在不在集合中的方法是對w通過3個雜湊函式對映到位陣列上,判斷3個對映位置是否為1。只要有乙個位置為0,就能說明w一定不在集合中。反之如果3個點都為1,則說明這個元素可能在集合中。此處不能判斷元素一定在集合中,因為存在一定的誤判率。比如對於上圖中的4,5,6這3個位置都為1,但是它是不同的資料對映到的點。如果有乙個資料剛好對映到這3個位置,雖然它不在集合中,但是我們也會誤判它。

新增元素

將要新增的元素給k個雜湊函式進行計算

得到位於位陣列上面的k個位置

將位陣列上對應位置1

查詢元素

將要查詢的元素給k個雜湊函式

得到對應於位陣列上的k個位置

如果k個位置有乙個為0,則肯定不在集合中

如果k個位置全部為1,則可能在集合中

go語言實現布隆過濾器

布隆過濾器

布隆過濾器 bloom filter 是1970年由布隆提出的。它實際上是乙個很長的二進位制向量和一系列隨機對映函式。布隆過濾器可以用於檢索乙個元素是否在乙個集合中。它的優點是空間效率和查詢時間都遠遠超過一般的演算法,缺點是有一定的誤識別率和刪除困難。如果想要判斷乙個元素是不是在乙個集合裡,一般想到...

布隆過濾器

布隆過濾器的概念 如果想要判斷乙個元素是不是在乙個集合裡,一般想到的是將所有元素儲存起來,然後通過比較確定。鍊錶,樹等等資料結構都是這種思路.但是隨著集合中元素的增加,我們需要的儲存空間越來越大,檢索速度也越來越慢 o n o logn 不過世界上還有一種叫作雜湊表 又叫 雜湊表,hash tabl...

布隆過濾器

如果想判斷乙個元素是不是在乙個集合裡,一般想到的是將集合中所有元素儲存起來,然後通過比較確定。鍊錶 樹 雜湊表 又叫雜湊表,hash table 等等資料結構都是這種思路。但是隨著集合中元素的增加,我們需要的儲存空間越來越大。同時檢索速度也越來越慢。bloom filter 是一種空間效率很高的隨機...