实现一个布隆过滤器并分析误判率。

以下是布隆过滤器的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)

误判率分析:

  1. 误判率公式:P ≈ (1 - e^(-k*n/m))^k
  2. 影响因素:
    • 位数组大小(m):m越大,误判率越低
    • 哈希函数数量(k):最优值k=(m/n)*ln2
    • 元素数量(n):n增加会提高误判率
  3. 示例计算:
    当n=100万,p=0.01时:
    m≈9585059 bits≈1.14MB
    k≈7个哈希函数
    实际误判率≈0.0099

使用说明:

  1. 初始化时需要预估元素数量和期望误判率
  2. 添加元素使用add()方法
  3. 查询元素使用check()方法
  4. 不支持删除操作

布隆过滤器适合大数据量、允许少量误判的场景,如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

请使用浏览器的分享功能分享到微信等