用python实现布谷鸟滤波器

cuckoop的Python项目详细描述


https://img.shields.io/pypi/v/cuckoopy.svghttps://img.shields.io/pypi/l/cuckoopy.svghttps://img.shields.io/pypi/wheel/cuckoopy.svghttps://img.shields.io/pypi/pyversions/cuckoopy.svghttps://travis-ci.org/rajathagasthya/cuckoopy.svg?branch=master

布谷鸟滤波器和布卢姆滤波器一样,是一种快速的概率数据结构, 近似集成员查询,具有一些小的假阳性概率。 虽然bloom过滤器具有空间效率并且被广泛使用,但是它们没有 支持在不重建整个筛选器的情况下从集合中删除项。 这可以通过对bloom过滤器的几个扩展来克服,例如 正在计算bloom过滤器,但开销很大。

布谷鸟过滤器支持在实现 比布卢姆过滤器性能更高。布谷鸟滤波器是基于部分键的 布谷鸟散列,只存储插入的每个项目的指纹。布谷鸟 过滤器提供比bloom过滤器更高的查找性能,并且使用更少的 如果目标误报率为<;3%,则空间大于bloom过滤器。

范斌的原始研究论文Cuckoo Filter: Practically Better Than Bloom, 安徒生、卡明斯基和米岑马赫 更详细地描述数据结构。

安装

确保您的系统上安装了Python(3.5+)。如果你没有 它,跟着these instructions 安装它。

使用以下命令安装布谷鸟:

$ pip install cuckoopy

用法

>>>fromcuckoopyimportCuckooFilter# Initialize a cuckoo filter with 10000 buckets with bucket size 4 and fingerprint size of 1 byte>>>cf=CuckooFilter(capacity=10000,bucket_size=4,fingerprint_size=1)

将项目插入筛选器:

>>>cf.insert('Hello!')True

在筛选器中查找项目:

>>>cf.contains('Hello!')True>>>'Hello!'incfTrue

从筛选器中删除项目:

>>>cf.delete('Hello!')True

获取筛选器的大小(存在的项目数):

>>>cf.size4>>>len(cf)4

在本地运行测试

此项目使用pytest进行测试。确保你 将tox安装到本地计算机上,并从 项目,运行:

$ tox

此命令在Python3.5和Python3.6环境中运行单元测试 代码覆盖范围详细信息。它还运行pep8(flake8)检查。对一个 特定环境(py35、py36或pep8),使用-e选项。

许可证

MIT License

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
将Java double[]]数组设置为double[],但不复制   java生成一个定制的lastIndexOf方法   bigdecimal在Java中何时应使用浮点类型?   java在BigO符号上的困惑   java从指定的文件夹加载一个jar和一个特定的类?   java安卓:在按钮下放置文本   java如何为具有多种类型的项设计rest端点?   java Javafx:ListView禁用列表中的指定元素   JavaJSF:如何一次呈现=#{bean.isRendered}多个组件   如何在自定义序列化(Java)中重写final writeObject()方法   java如何在不重命名实例变量的情况下使用实例变量两次?   使用servlet过滤器时,应用程序引擎上的java Spring启动应用程序出错   java我的代码适用于访问器和变异器方法吗?   java Bellman Ford随机生成错误结果   JavaDoc生成的文档两次列出类和方法   内存中的java H2数据库控制台未打开   排序如何在java中对arraylist进行反向排序?(仅使用选择排序)   在Java中调用参数化构造函数   java如何在eclipse中恢复我选中的已删除项目(删除磁盘上的内容)   java如何停止等待用户输入?