布隆過濾器
它是一種獨特的數(shù)據(jù)結(jié)構(gòu),用以判斷:一個數(shù)據(jù)可能存在或一定不存在
算法思路:
- 開一個指定長度的數(shù)組,將所有的元素值設(shè)為0
- 添加元素時,執(zhí)行hash,得到多個位置下標(biāo),將數(shù)組對應(yīng)位置設(shè)置為1
- 檢查元素是否存在時,執(zhí)行hash,得到多個位置下標(biāo),查看數(shù)組中對應(yīng)下標(biāo)的值:
1> 如果值均為1,則可能存在
2> 如果值有一個是0,則一定不存在
綜上所述,布隆過濾器可以用來判斷一定不存在的值,且效率較高,但是隨著插入的數(shù)據(jù)不斷增加,判斷錯誤的概率也逐漸變大。有一個極端情況就是全部位置都為1,這個時候就什么都判斷不出來了。
示例代碼
主要使用pybloom_live
github項目主頁:https://github.com/joseph-fox/python-bloomfilter
一般有兩種使用方法:文章來源:http://www.zghlxwxcb.cn/news/detail-400026.html
- 一種是固定容量限制的布隆過濾器,當(dāng)加入的元素大于容量限制時會報錯,這樣會保證錯誤率小于給定的概率
from pybloom_live import BloomFilter bf = BloomFilter(1000) # 固定最大容量1000 bf.add("a") print("a" in bf) # True print("b" in bf) # False
- 另一種是可伸縮的過濾器,當(dāng)加入的元素大于容量限制時不會報錯,但會增加錯誤率
from pybloom_live import ScalableBloomFilter scala_bf = ScalableBloomFilter(1000) scala_bf.add("a") print("a" in scala_bf) # True print("b" in scala_bf) # False
參考文章
python-布隆過濾器:https://www.cnblogs.com/yscl/p/12003359.html文章來源地址http://www.zghlxwxcb.cn/news/detail-400026.html
到了這里,關(guān)于python使用布隆過濾器篩選數(shù)據(jù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!