一、原理分析
bloomfiler(布隆過濾器)是由howard bloom在2023年提出的二進位制向量資料結構,怎麼來理解「二進位制向量資料結構」?
我們將其分解成「二進位制」、「向量」和「資料結構」來分別理解。
1、二進位制:用0和1來表示的數。
3、資料結構:儲存和組織資料的方式。
我們可以這樣形象理解bloomfiler,它是一段位列,位列上每一位以0或1表示著bloomfiler組織資料的意義。
而bloomfiler組織資料是將資料通過k個雜湊函式分別對映到位列上,並將位列相應位置的位值賦值為1。位值為1的意義是表示資料在bloomfiler中存在。
如圖:1、位列,開始沒有資料
2、將資料a雜湊函式分別對映到位列上,並將位列相應位置的位賦值為1。
3、將資料b雜湊函式分別對映到位列上,並將位列相應位置的位賦值為1。
查詢乙個資料是否存在於bloomfiler中,即將資料通過k個雜湊函式分別對映到位列上,看位列相應的位置上的位值是否都為1,
如果都為1,則說明存在;如果不都為1,則說明不存在。
由於雜湊存在衝突,存在的情況下,有一定的誤識別率。即乙個數本來不存在於bloomfiler中,而被告訴存在。
二、**實現
static uint32_t bloomhash(const slice& key) // 雜湊函式
class bloomfilterpolicy : public filterpolicy
virtual const char* name() const
// n:key的個數;dst:存放過濾器處理的結果
virtual void createfilter(const slice* keys, int n, std::string* dst) const}}
virtual bool keymaymatch(const slice& key, const slice& bloom_filter) const
uint32_t h = bloomhash(key);
const uint32_t delta = (h >> 17) | (h << 15); // rotate right 17 bits
for (size_t j = 0; j < k; j++)
return true;}};
《原始碼閱讀》原始碼閱讀技巧,原始碼閱讀工具
檢視某個類的完整繼承關係 選中類的名稱,然後按f4 quick type hierarchy quick type hierarchy可以顯示出類的繼承結構,包括它的父類和子類 supertype hierarchy supertype hierarchy可以顯示出類的繼承和實現結構,包括它的父類和...
Cartographer原始碼篇 原始碼分析 1
在安裝編譯cartographer 1.0.0的時候,我們可以看到 主要包括cartorgarpher ros cartographer ceres sover三個部分。其中,ceres solver用於非線性優化,求解最小二乘問題 cartographer ros為ros平台的封裝,獲取感測器資料...
python原始碼剖析 Python原始碼剖析
第頁共 頁python 原始碼剖析 物件機制 1.物件 在python 的世界中,一切都是物件,乙個整數是乙個物件,乙個字串也是 乙個物件,更為奇妙的是,型別也是乙個物件,整數型別是乙個物件,字串類 型也是乙個物件。從 年guido 在那個聖誕節揭開 python 世界的大幕開始,一直到現在,pyt...