广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python实现布隆过滤器
  • 342
分享到

Python实现布隆过滤器

过滤器Python 2023-01-31 02:01:18 342人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

转载自:Http://blog.csdn.net/demon24/article/details/8537665 http://blog.csdn.net/u013402746/article/details/28414901      

转载自:Http://blog.csdn.net/demon24/article/details/8537665

http://blog.csdn.net/u013402746/article/details/28414901          http://palydawn.blog.163.com/blog/static/182969056201210260470485/

#_*_coding:utf_8_
import BitVector
import os
import sys

class SimpleHash():  
    
    def __init__(self, capability, seed):
        self.capability = capability
        self.seed = seed

    #传入的value即为url值,ord(value[i])表示第i位字符的ascii码值
    def hash(self, value):
        ret = 0
        for i in range(len(value)):
            ret += self.seed*ret + ord(value[i])
        #最终产生的随机数是二进制向量最大下标与随机数的按位与结果
        return (self.capability-1) & ret    

class BloomFilter():
    
    def __init__(self, BIT_SIZE=1<<25):
        self.BIT_SIZE = 1 << 25
        self.seeds = [5, 7, 11, 13, 31, 37, 61]
        #建立一个大小为1<<25=33554432位的二进制向量,分配内存
    	self.bitset = BitVector.BitVector(size=self.BIT_SIZE)
        self.hashFunc = []
        #利用8个素数初始化8个随机数生成器
        for i in range(len(self.seeds)):
            self.hashFunc.append(SimpleHash(self.BIT_SIZE, self.seeds[i]))
        
    def insert(self, value):
        for f in self.hashFunc:
            loc = f.hash(value)
            self.bitset[loc] = 1
    def isContaions(self, value):
        if value == None:
            return False
        ret = True
        for f in self.hashFunc:
            loc = f.hash(value)
            #用同样的随机数产生方法对比相应位的二进制值,只要发现有一个不同即返回结果为假
            ret = ret & self.bitset[loc]
            if ret==False:
                return ret
        #只有当8个二进制位都相等时才返回真
        return ret

def main():
    fd = open("urls.txt")
    bloomfilter = BloomFilter()
    while True:
        #url = raw_input()
        url = fd.readline()
        if cmp(url, 'exit') == 0: #if 'exit' then break
            break
        if bloomfilter.isContaions(url) == False:
            bloomfilter.insert(url)
        else:
            print 'url :%s has exist' % url 
            
main()

程序根据网页链接的个数计算所需最佳空间大小,即二进制向量的位数,以及所需随机生成器的哈希函数个数:

def __init__(self, error_rate, elementNum):

        #计算所需要的bit数
        self.bit_num = -1 * elementNum * cmath.log(error_rate) / (cmath.log(2.0) * cmath.log(2.0))
        #四字节对齐
        self.bit_num = self.align_4byte(self.bit_num.real)

        #分配内存
        self.bit_array = BitVector(size=self.bit_num)

        #计算hash函数个数
        self.hash_num = cmath.log(2) * self.bit_num / elementNum
        self.hash_num = self.hash_num.real
        #向上取整
        self.hash_num = int(self.hash_num) + 1

        #产生hash函数种子
        self.hash_seeds = self.generate_hashseeds(self.hash_num)

生成指定的前n位素数:

def is_prime(n):

    if n == 9:
        return False
    for i in range(3,int(n**0.5)):
        if n%i == 0:
            return False
    return True

def find_prime( n ): #找到从5开始的n个素数,使用素数筛法
    prime = []
    i = 5
    while len(prime) != n:
        flag = False
        for j in prime:
            if i % j == 0:
                flag = True
                i += 1
                break
        if flag: #如果能被素数整除就跳过一轮循环
            continue

        if is_prime(i):
            prime.append(i)
        i += 1

    return prime

 

--结束END--

本文标题: Python实现布隆过滤器

本文链接: https://www.lsjlt.com/news/186387.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python实现布隆过滤器
    转载自:http://blog.csdn.net/demon24/article/details/8537665 http://blog.csdn.net/u013402746/article/details/28414901      ...
    99+
    2023-01-31
    过滤器 Python
  • 布隆过滤器的Python实现(标准、计
    github:bloompy 布隆过滤器的Python3实现,包括标准、计数、标准扩容、计数扩容。更新自pybloom。 安装 pip install bloompy 使用 通过bloompy你可以使用四种布隆过滤器 标准布隆过滤器 ...
    99+
    2023-01-31
    过滤器 标准 Python
  • Redis如何实现布隆过滤器
    小编给大家分享一下Redis如何实现布隆过滤器,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!布隆过滤器(Bloom Filter...
    99+
    2022-10-18
  • Redis 中布隆过滤器的实现
    Redis 中布隆过滤器的实现?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。什么是『布隆过滤器』布隆过滤器是一个神奇的数据结构,可以用来判断一...
    99+
    2022-10-18
  • Java怎么实现布隆过滤器
    这篇“Java怎么实现布隆过滤器”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Java怎么实现布隆过滤器”文章吧。什么是布隆...
    99+
    2023-07-05
  • Java的布隆过滤器如何实现
    今天小编给大家分享一下Java的布隆过滤器如何实现的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。BitMap现代计算机用二进...
    99+
    2023-06-29
  • SpringBoot+Redis如何实现布隆过滤器
    小编给大家分享一下SpringBoot+Redis如何实现布隆过滤器,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!简述关于布隆过滤器的详细介绍,我在这里就不再赘述一遍了我们首先知道:BloomFilter使用长度为m bi...
    99+
    2023-06-29
  • Redis中的布隆过滤器怎么实现
    这篇文章主要介绍“Redis中的布隆过滤器怎么实现”,在日常操作中,相信很多人在Redis中的布隆过滤器怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Redis中的布...
    99+
    2022-10-19
  • Redis BloomFilter布隆过滤器原理与实现
    目录Bloom Filter 概念Bloom Filter 原理缓存穿透Bloom Filter的缺点常见问题go语言实现Bloom Filter 概念 布隆过滤器(英语:Bloom...
    99+
    2022-11-11
  • 什么是布隆过滤器
    本篇内容介绍了“什么是布隆过滤器”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在正式讲解布隆过滤器之前,先...
    99+
    2022-10-19
  • redis的set get[布隆过滤器]
    ...
    99+
    2018-08-21
    redis的set get[布隆过滤器]
  • SpringBoot+Redis实现布隆过滤器的示例代码
    目录简述Redis 安装 Bloom Filter基本指令结合 SpingBoot方式一方式二简述 关于布隆过滤器的详细介绍,我在这里就不再赘述一遍了 我们首先知道:BloomFil...
    99+
    2022-11-13
  • Java布隆过滤器的原理和实现分析
    目录前言1. 预备知识1.1 哈希函数2. 布隆过滤器2.1 概念2.2 实现原理2.3 步骤2.4 实现前言 数组、链表、树等数据结构会存储元素的内容,一旦数据量过大,消耗的内存也...
    99+
    2022-11-13
    Java布隆过滤器 Java布隆过滤器原理 Java布隆过滤器实现
  • Redis怎么安装布隆过滤器
    Redis安装布隆过滤器的方法:打开终端命令行,依次输入以下命令进行安装。wget https://github.com/RedisLabsModules/rebloom/archive/v1.1.1.tar.gz #下载安装包tar zx...
    99+
    2022-10-05
  • redis如何使用布隆过滤器
    布隆过滤器2个基本指令是bf.add和bf.exists,如果想要一次添加多个,就需要用到bf.madd 指令,同样如果需要一次查询多个元素是否存在,就需要用到bf.mexists 指令,基本使用如下:127.0.0.1:6379>&...
    99+
    2022-10-21
  • Java布隆过滤器怎么使用
    本文小编为大家详细介绍“Java布隆过滤器怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java布隆过滤器怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。通常你判断某个元素是否存在用的是什么?很多...
    99+
    2023-06-29
  • Java中的布隆过滤器原理实现和应用
    目录介绍实现初始化数据代码实现测试存在的数据不存在的数据介绍 本文全部代码地址 布隆过滤器是一种高效的数据结构,用于判断一个元素是否存在于一个集合中.它的主要优点是速度快,空间占用少...
    99+
    2023-05-17
    Java布隆过滤器使用 Java布隆过滤器实现
  • C#实现从位图到布隆过滤器的方法
    目录前言布隆过滤器简介数据的存储Hash 冲突的解决方案为什么布隆过滤器不支持删除用 C# 实现 Bitmap位运算利用位运算创建 Bitmap用 C# 实现 布隆过滤器Murmur...
    99+
    2022-11-13
  • 布隆过滤器实战【防止缓存击穿】
    为什么引入我们的业务中经常会遇到穿库的问题,通常可以通过缓存解决。 如果数据维度比较多,结果数据集合比较大时,缓存的效果就不明显了。 因此为了解决穿库的问题,我们引入Bloom Filter。适合的场景数据...
    99+
    2022-10-18
  • Redis中Redisson布隆过滤器的学习
    目录简介使用Demo依赖测试代码简析初始化添加元素检索元素简介 本文基于Spring Boot 2.6.6、redisson 3.16.0简单分析Redisson布隆过滤器的使用。 ...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作