位元幣 比較火 書本資料也較少
對cache快取的概念就不講了
filter 判斷這個元素在不在 經過filter判斷這個元素在不在如果不在的話肯定就不在
而如果在的話(有誤差)在從資料庫和記憶體中取
chache和filter 有一定的異曲同工之妙
我們來講一下hash函式
作用就是通過對映拿到值
hash有個問題 即使value 衝突 ?怎麼解決 把對映到同乙個value的key作為拉鍊存起來 比如列表
filter和上述hash一樣 不過是把
乙個元素 散射到二進位制向量裡面來
對映到很長很長的二進位制向量 比如int就是64的二進位制向量
而布隆過濾器可以檢索乙個元素是否在乙個集合中
空間複雜度 事件複雜度遠遠小於其他演算法
缺點是勿失識別率和刪除困難
因為是二進位制所以快 但是也無法避免乙個新的問題 就是準確率低 (天下沒有一塊完整的蛋糕 不然為什麼不直接用他?)
首先講一下他的勿識別率
首先元素在的時候才會有勿識別率 不在的時候肯定是不在的
如果在任何條件下 識別率都只有80%這樣的情況 那麼這個演算法肯定是沒用的
對於任何乙個元素 使用對映函式 對映到 向量裡 把 0 置為1
新來乙個w 用來查詢 如果對映0的情況 那麼這個w肯定不存在
大白話 :通過左邊a和e把向量描紅 右邊有三個元素需要查詢acb
發現a有 c沒有 b有 實際上b是沒有的 所以這就導致了勿失別
filter主要工作就是幫助過濾一下不存在的元素 所以說和cache一樣擋了一層 如果不存在再去資料庫查詢
所以後面還要跟一層資料管理系統 比如mysql 後面的是資料權威機構 而過濾器和cache是預先處理模組
演算法 布隆過濾器
面試的時候我們經常會被問到,100億個url中有多少重複的,或者讓你設計乙個100億個url的黑名單。傳統使用hash去儲存,1個url算64bit,100億個我們需要320g的記憶體來處理,就需要各種分布式各種演算法來懟,對於公司來說是一筆不小的開銷而且很慢。這個時候如果說允許有失誤,而且是 另可...
布隆過濾器
布隆過濾器 bloom filter 是1970年由布隆提出的。它實際上是乙個很長的二進位制向量和一系列隨機對映函式。布隆過濾器可以用於檢索乙個元素是否在乙個集合中。它的優點是空間效率和查詢時間都遠遠超過一般的演算法,缺點是有一定的誤識別率和刪除困難。如果想要判斷乙個元素是不是在乙個集合裡,一般想到...
布隆過濾器
布隆過濾器的概念 如果想要判斷乙個元素是不是在乙個集合裡,一般想到的是將所有元素儲存起來,然後通過比較確定。鍊錶,樹等等資料結構都是這種思路.但是隨著集合中元素的增加,我們需要的儲存空間越來越大,檢索速度也越來越慢 o n o logn 不過世界上還有一種叫作雜湊表 又叫 雜湊表,hash tabl...