布隆過濾器原理(小白都能看懂的demo)

2021-10-24 08:01:36 字數 1228 閱讀 8859

作用嘛就是用來過濾非法key,避免快取穿透,布隆過濾器用的是位陣列,很節省空間,效能也相當好

先貼demo後bb

public

class

mybloomfilter

;//add方法,計算出key的hash值,並將對應下標置為true

public

void

add(

object key)

//判斷key是否存在,true不一定說明key存在,但是false一定說明不存在

public

boolean

iscontain

(object key)

return result;

}private

inthash

(object key,

int i)

}

測試

public

static

void

main

(string

args)

原理

通過對比hash演算法計算出來的下標,注意,我們是對比一組,而不是只看一次,一次hash結果對應乙個下標

把同乙個key進行多次hash運算,將hash出來的下標放入陣列,陣列預設全為0,放入元素後該下標就為1,後面判斷是否存在元素的時候也是進行同樣次數的hash運算,看下結果對應的所有下標是否全為1,若全為1,則代表該key可能存在,若存在不為1的,則說明該key一定不存在;

預設位陣列:[0,0,0,0,0,0]

比方說有個已知key的下標是0,2,5

對應位陣列:[1,0,1,0,0,1]

判斷某個未知key存不存在的時候,假設我們計算出來的下標是0,2,4

對應位陣列:[1,0,1,0,1,0]

此時位陣列內5對應下標值為0,而已知key位陣列的5對應下標位1,說明這兩個一定不是同乙個key

相反,如果某個key計算出來的下標為[1,0,1,0,0,1],只能說這個key可能存在,因為這個位置可能是其它key計算出來的

如果對上面的hash演算法有疑惑,請移步幫你真正理解hashcode和hash演算法

demo複製可用,家裡有條件的都在編譯器上跑一跑,測一測

ok我話講完

嚶嚶嚶~

小白都能看懂的block

首先說明一下,我自己也是乙個小白 這是我對block的一點認識或總結,有不對的地方,希望大家指出來 block就是乙個 塊,用來執行一小段程式的,通常我們定義乙個block 可以用它的基本模型,返回值型別 變數的名字 引數型別 例如 int myblock int 這就是定義了乙個block 這個變...

小白都能看懂的softmax詳解

softmax把一些輸入對映為0 1之間的實數,並且歸一化保證和為1,因此多分類的概率之和也剛好為1 或參考 小白都能看懂的softmax詳解 在機器學習尤其是深度學習中,softmax是個非常常用而且比較重要的函式,尤其在多分類的場景中使用廣泛。他把一些輸入對映為0 1之間的實數,並且歸一化保證和...

Bloom Filter 布隆過濾器 原理

bloom filter 布隆過濾器 主要用於判斷某個元素是否屬於集合內,但是這種判斷不是一定正確的。經典問題 假設你有數量非常龐大的url集合,現在給你乙個新的url,要你快速判斷這個url是否在上述的url集合中。解決這個問題比較原始的方法是 先用乙個陣列把所有url存起來,然後再掃瞄這個陣列,...