布隆過濾器

2021-07-24 12:44:32 字數 1986 閱讀 4474

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

bloom filter 是一種空間效率很高的隨機資料結構,bloom filter 可以看做是對 bit-map 的擴充套件, 它的原理是:

`>**布隆過濾器只是點陣圖的乙個擴充套件。點陣圖是乙個位表示key的存在狀態,而布隆過濾器是多個位表示表示乙個數的存在狀態**

注意:對於布隆過濾器查詢乙個資料

1.找到不一定存在。

2.找不到一定不存在。

這說明布隆過濾器是近似查詢。```

[這裡有關布隆過濾器更詳細的介紹,講的很清楚:

下面是**實現:

/* [布隆過濾器的標頭檔案:位圖] :

#pragma once

#include

#includiostream>

#include"bitmap.h"

using namespace std;

templatestruct _func1

};templatestruct _func2

};templatestruct _func3

};templatestruct _func4

};templatestruct _func5

};template<> //模板的特化:必須要先寫乙個同名的模板類或者結構體

struct _func1

return hash;

}size_t operator() (const string& str)

};template<>

struct _func2

else

}return hash;

}size_t operator() (const string& str)

};template<>

struct _func3

return hash;

}size_t operator() (const string& str)

};template<>

struct _func4

return hash;

}size_t operator() (const string& str)

};template<>

struct _func5

return hash;

}size_t operator() (const string& str)

};template < class k = string,

class func1 = _func1,

class func2 = _func2,

class func4 = _func4,

class func5 = _func5> /*五種計算string型別轉換為數字的結構體,內部用

的是仿函式,過載operator()()。*/

class bloomfilter

void set(const k& key) //用相同的key呼叫不同的函式得到不同的位,設定為1

bool test(const k& key)

protected:

bitmap _bm;

size_t _range;

};void testbloomfilter()

cout << bf.test(75) << endl;

cout << bf.test(71) << endl;

cout << bf.test(5) << endl;

cout << bf.test(555) << endl;

ut << bm.test(71) << endl;

cout << bm.test(5) << endl;

}

布隆過濾器

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

布隆過濾器

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

布隆過濾器

布隆過濾器 的乙個好處就是可以乙個bit表示乙個資料,下面有乙個python的開源庫 建構函式 class pybloomfilter.bloomfilter capacity int,error rate float,filename string 這個filename是生成的bloomfilte...