以下是布隆过滤器的Python实现及误判率分析:
import math
import mmh3
from bitarray import bitarray
class BloomFilter:
def __init__(self, item_count, fp_prob):
self.fp_prob = fp_prob
self.size = self.get_size(item_count, fp_prob)
self.hash_count = self.get_hash_count(self.size, item_count)
self.bit_array = bitarray(self.size)
self.bit_array.setall(0)
def add(self, item):
for i in range(self.hash_count):
digest = mmh3.hash(item, i) % self.size
self.bit_array[digest] = True
def check(self, item):
for i in range(self.hash_count):
digest = mmh3.hash(item, i) % self.size
if not self.bit_array[digest]:
return False
return True
@classmethod
def get_size(cls, n, p):
m = -(n * math.log(p))/(math.log(2)**2)
return int(m)
@classmethod
def get_hash_count(cls, m, n):
k = (m/n) * math.log(2)
return int(k)
误判率分析:
- 误判率公式:P ≈ (1 - e^(-k*n/m))^k
- 影响因素:
- 位数组大小(m):m越大,误判率越低
- 哈希函数数量(k):最优值k=(m/n)*ln2
- 元素数量(n):n增加会提高误判率
- 示例计算:
当n=100万,p=0.01时:
m≈9585059 bits≈1.14MB
k≈7个哈希函数
实际误判率≈0.0099
使用说明:
- 初始化时需要预估元素数量和期望误判率
- 添加元素使用add()方法
- 查询元素使用check()方法
- 不支持删除操作
布隆过滤器适合大数据量、允许少量误判的场景,如URL黑名单、缓存穿透防护等。
http://bbs.zgjzs.org
http://news.zgjzs.org
http://blog.zgjzs.org
http://mall.zgjzs.org
http://shop.zgjzs.org
http://vip.zgjzs.org
http://m.zgjzs.org
http://wap.zgjzs.org
http://app.zgjzs.org
http://down.zgjzs.org
http://data.zgjzs.org
http://pic.zgjzs.org
http://img.zgjzs.org
http://video.zgjzs.org
http://music.zgjzs.org
http://game.zgjzs.org
http://edu.zgjzs.org
http://job.zgjzs.org
http://house.zgjzs.org
http://car.zgjzs.org
http://travel.zgjzs.org
http://food.zgjzs.org
http://health.zgjzs.org
http://tech.zgjzs.org
http://finance.zgjzs.org
http://stock.zgjzs.org
http://fund.zgjzs.org
http://lottery.zgjzs.org
http://sports.zgjzs.org
http://live.zgjzs.org
http://tv.zgjzs.org
http://movie.zgjzs.org
http://book.zgjzs.org
http://art.zgjzs.org
http://baby.zgjzs.org
http://pet.zgjzs.org
http://fashion.zgjzs.org
http://beauty.zgjzs.org
http://love.zgjzs.org
http://wedding.zgjzs.org
http://home.zgjzs.org
http://ren.zgjzs.org
http://ask.zgjzs.org
http://search.zgjzs.org
http://map.zgjzs.org
http://mail.zgjzs.org
http://cloud.zgjzs.org
http://pay.zgjzs.org
http://bank.zgjzs.org
http://gov.zgjzs.org
http://service.shangpin.org
http://member.shangpin.org
http://help.shangpin.org
http://info.shangpin.org
http://support.shangpin.org
http://account.shangpin.org
http://login.shangpin.org
http://register.shangpin.org
http://api.shangpin.org
http://static.shangpin.org
http://cdn.shangpin.org
http://image.shangpin.org
http://photo.shangpin.org
http://upload.shangpin.org
http://download.shangpin.org
http://file.shangpin.org
http://doc.shangpin.org
http://office.shangpin.org
http://work.shangpin.org
http://team.shangpin.org
http://group.shangpin.org
http://project.shangpin.org
http://task.shangpin.org
http://event.shangpin.org
http://calendar.shangpin.org
http://schedule.shangpin.org
http://meeting.shangpin.org
http://chat.shangpin.org
http://message.shangpin.org
http://forum.shangpin.org
http://community.shangpin.org
http://club.shangpin.org
http://activity.shangpin.org
http://market.shangpin.org
http://trade.shangpin.org
http://business.shangpin.org
http://company.shangpin.org
http://enterprise.shangpin.org
http://industry.shangpin.org
http://product.shangpin.org
http://goods.shangpin.org
http://item.shangpin.org
http://brand.shangpin.org
http://category.shangpin.org
http://order.shangpin.org
http://cart.shangpin.org
http://buy.shangpin.org
http://sell.shangpin.org
http://auction.shangpin.org
http://bid.shangpin.org
http://admin.snjrw.org
http://manage.snjrw.org
http://system.snjrw.org
http://portal.snjrw.org
http://center.snjrw.org
http://platform.snjrw.org
http://dashboard.snjrw.org
http://console.snjrw.org
http://control.snjrw.org
http://monitor.snjrw.org
http://report.snjrw.org
http://analysis.snjrw.org
http://statistics.snjrw.org
http://bigdata.snjrw.org
http://ai.snjrw.org
http://robot.snjrw.org
http://smart.snjrw.org
http://iot.snjrw.org
http://vr.snjrw.org
http://ar.snjrw.org
http://blockchain.snjrw.org
http://crypto.snjrw.org
http://nft.snjrw.org
http://meta.snjrw.org
http://web3.snjrw.org
http://dao.snjrw.org
http://defi.snjrw.org
http://mining.snjrw.org
http://wallet.snjrw.org
http://exchange.snjrw.org
http://token.snjrw.org
http://coin.snjrw.org
http://digital.snjrw.org
http://virtual.snjrw.org
http://cyber.snjrw.org
http://security.snjrw.org
http://safe.snjrw.org
http://protect.snjrw.org
http://firewall.snjrw.org
http://antivirus.snjrw.org
http://privacy.snjrw.org
http://encrypt.snjrw.org
http://decode.snjrw.org
http://hack.snjrw.org
http://bug.snjrw.org
http://patch.snjrw.org
http://update.snjrw.org
http://upgrade.snjrw.org
http://fix.snjrw.org
http://debug.snjrw.org