比特幣 比較火 書本資料也較少
對cache緩存的概念就不講了
Filter 判斷這個元素在不在 經過filter判斷這個元素在不在如果不在的話肯定就不在
而如果在的話(有誤差)在從數據庫和內存中取
chache和filter 有一定的異曲同工之妙
我們來講一下hash函數
作用就是通過映射拿到值
hash有個問題 即使value 沖突 ?怎么解決 把映射到同一個value的key作為拉鏈存起來 比如列表
filter 和 cache 是互為互補的作用
filter和上述hash一樣 不過是把
一個元素 散射到二進制向量里面來
布蘭過濾器實現過程
映射到很長很長的二進制向量 比如int就是64的二進制向量
而布隆過濾器可以檢索一個元素是否在一個集合中
布隆過濾器優點和缺點
空間復雜度 事件復雜度遠遠小於其他算法
缺點是勿失識別率和刪除困難
為什么那么快
因為是二進制所以快 但是也無法避免一個新的問題 就是准確率低 (天下沒有一塊完整的蛋糕 不然為什么不直接用他?)
勿識別率低那么為什么還要?
首先講一下他的勿識別率
首先元素在的時候才會有勿識別率 不在的時候肯定是不在的
如果在任何條件下 識別率都只有80%這樣的情況 那么這個算法肯定是沒用的
布隆過濾器實現原理
對於任何一個元素 使用映射函數 映射到 向量里 把 0 置為1
新來一個w 用來查詢 如果映射0的情況 那么這個w肯定不存在
大白話 :通過左邊A和E把向量描紅 右邊有三個元素需要查找ACB
發現a有 c沒有 b有 實際上b是沒有的 所以這就導致了勿失別
怎么解決勿失別
filter主要工作就是幫助過濾一下不存在的元素 所以說和cache一樣擋了一層 如果不存在再去數據庫查找
所以后面還要跟一層數據管理系統 比如mysql 后面的是數據權威機構 而過濾器和cache是預先處理模塊