Bloom Filters Count-Min Sketch

2024-02-03 05:38
文章标签 sketch count min bloom filters

本文主要是介绍Bloom Filters Count-Min Sketch,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

今日看了两个基于概率的数据结构(Probabilistic data structures)
Bloom Filters 和 Count-Min Sketch,基本思想相类似。

其实是两个实现简单的算法,但是需要用到一定的数学原理。

但本文仅介绍方法,不介绍数学原理。

Bloom Filters

问给出的数是否在集合 S S S 中,集合可增可删,且集合中数的取值范围 w w w 较大,设 w ≤ 1 0 18 w\le 10^{18} w1018

简单版

通过哈希函数 H H H,对于给定的数 x x x,将 y = H ( x ) y=H(x) y=H(x)(比如 y ≤ 1 0 5 ) y\le 10^5) y105,存在 bitset 中,通过 0/1 来表示是否在 S S S 中出现,这样可以极大的节省空间。

升级版

根据生日攻击原理,我们可以知道,当 ∣ S ∣ |S| S 较大时,会有较大的概率产生冲突。

所以考虑使用多个哈希函数 H k H_k Hk

则对于集合 S S S 中的数 x x x ∀ i ≤ k , y i = H k ( x ) \forall i \le k, y_i=H_k(x) ik,yi=Hk(x),则令 b i t s e t [ y i ] = 1 bitset[y_i]=1 bitset[yi]=1

若要判断 x x x 是否在 S S S 中,则要求 ∀ i ≤ k , y i = H k ( x ) \forall i \le k, y_i=H_k(x) ik,yi=Hk(x) b i t s e t [ y i ] = 1 bitset[y_i]=1 bitset[yi]=1

此网址下有演示 demo。

可删除

如果想要删除的话,为了避免两个不同的数相互干扰,我们改成计数版本。

即:

则每添加一个数 x x x ∀ i ≤ k , y i = H k ( x ) \forall i \le k, y_i=H_k(x) ik,yi=Hk(x),则令 b i t s e t [ y i ] + = 1 bitset[y_i]\color{red}{+=1} bitset[yi]+=1

如要删除一个数 x x x,则 ∀ i ≤ k , y i = H k ( x ) \forall i \le k, y_i=H_k(x) ik,yi=Hk(x),则令 b i t s e t [ y i ] − = 1 bitset[y_i]\color{red}{-=1} bitset[yi]=1

Count-Min Sketch

问给出的数是否在可重集合 S S S 中,集合可增可删,且集合中数的取值范围 w w w 较大,设 w ≤ 1 0 18 w\le 10^{18} w1018

简单版

同 Bloom Filters 类似,通过哈希函数 H H H,对于给定的数 x x x,将 y = H ( x ) y=H(x) y=H(x)(比如 y ≤ 1 0 5 ) y\le 10^5) y105,存在数组 A [ y ] A[y] A[y] 中,通过 A [ y ] A[y] A[y] 的值来得出在 S S S 中出现的次数,这样可以极大的节省空间。

升级版

根据生日攻击原理,同理。

所以考虑使用多个哈希函数 H k H_k Hk

设使用了 k k k 个,则我们定义一个二维数组 A [ k ] [ ] A[k][] A[k][]

则对于集合 S S S 中的数 x x x ∀ i ≤ k , y i = H k ( x ) \forall i \le k, y_i=H_k(x) ik,yi=Hk(x),则令 A [ i ] [ y i ] + + A[i][y_i]++ A[i][yi]++

若要求得 x x x S S S 中的出现次数,则为

min ⁡ i ≤ k , y i = H i ( x ) A [ i ] [ y i ] \min_{i\le k,y_i=H_i(x)} A[i][y_i] ik,yi=Hi(x)minA[i][yi]

此网址下有演示 demo。

这篇关于Bloom Filters Count-Min Sketch的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/673126

相关文章

leetcode#38. Count and Say

The count-and-say sequence is the sequence of integers with the first five terms as following: 1. 12. 113. 214. 12115. 111221 1 is read off as “one 1” or 11. 11 is read off

如何在macOS系统上安装Sketch软件?

Sketch是一款广受欢迎的矢量设计工具,特别是在UI/UX设计师中有着极高的使用率。它功能强大且易于上手,适用于图标设计、网页和移动应用的界面设计等。然而,由于Sketch仅支持在macOS系统上运行,对于初次接触这款软件的用户来说,安装过程可能会存在一些不确定性。因此,本文将详细介绍如何在macOS上顺利安装Sketch,并讨论一些常见问题及其解决方法,帮助你快速开始使用这款设计工具。 一、

Flink实例(六十八):布隆过滤器(Bloom Filter)的原理和实现

什么情况下需要布隆过滤器? 先来看几个比较常见的例子 字处理软件中,需要检查一个英语单词是否拼写正确在 FBI,一个嫌疑人的名字是否已经在嫌疑名单上在网络爬虫里,一个网址是否被访问过yahoo, gmail等邮箱垃圾邮件过滤功能 这几个例子有一个共同的特点: 如何判断一个元素是否存在一个集合中? 常规思路 数组链表树、平衡二叉树、TrieMap (红黑树)哈希表 虽然上面描述的

优化采样参数提升大语言模型响应质量:深入分析温度、top_p、top_k和min_p的随机解码策略

当向大语言模型(LLM)提出查询时,模型会为其词汇表中的每个可能标记输出概率值。从这个概率分布中采样一个标记后,我们可以将该标记附加到输入提示中,使LLM能够继续输出下一个标记的概率。这个采样过程可以通过诸如 temperature 和 top_p 等参数进行精确控制。但是你是否曾深入思考过temperature和top_p参数的具体作用? 本文将详细解析并可视化定义LLM输出行为的

《Learning To Count Everything》CVPR2021

摘要 论文提出了一种新的方法来解决视觉计数问题,即在给定类别中仅有少量标注实例的情况下,对任何类别的对象进行计数。将计数问题视为一个少样本回归任务,并提出了一种新颖的方法,该方法通过查询图像和查询图像中的少量示例对象来预测图像中所有感兴趣对象的存在密度图。此外,还提出了一种新颖的适应策略,使网络能够在测试时仅使用新类别中的少量示例对象来适应任何新的视觉类别。为了支持这一任务,作者还引入了一个包含

class _ContiguousArrayStorage deallocated with non-zero retain count

Xcode报错 : Object 0x11c614000 of class _ContiguousArrayStorage deallocated with non-zero retain count 2. This object's deinit, or something called from it, may have created a strong reference to self w

LeetCode - 38. Count and Say

38. Count and Say  Problem's Link  ---------------------------------------------------------------------------- Mean:  题目意思太晦涩。 1 读出来 就是“1个1” 所以记为“11” 11 读出来 就是“2个1” 所以记为“21” 21 读出来 就是“1个

【FZU】2105 Digits Count 线段树

传送门:【FZU】2105 Digits Count 题目分析:与、或、异或三种操作都是每一位相互独立的,所以可以将线段树建四棵,分别对应一位,and和or操作相当于覆盖操作,xor操作相当于反转操作,就和普通的线段树方法类似,设立两个lazy标记即可。查询的时候求得每一位的1的个数*权重(1,2,4,8),全部累加就是答案。 代码如下: #include <cst

CodeForces 451D Count Good Substrings

题意: 一个只包含a和b的字符串  问  它有几个长度为偶数和长度为奇数的“压缩回文串”  压缩的概念是  相邻的相同字符压缩成一个字符 思路: 串经过压缩一定满足如下形式 ……ababab……  那么这样只要两端的字符相同则中间一定是回文的  因此对于一个a它作为左端点形成的回文串个数就等于它右边的a的个数  那么长度是奇数还是偶数呢  可以这么判断  如果a在奇数位置上和它匹配的a也在奇

填坑之路-记录Redis操作的异常QueryTimeoutException RedisCommandTimeoutException: Command timed out after 1 min

默认配置 1.命令执行的默认超时时间为1分钟 2.默认的Lettuce集群配置里面才有命令执行超时时间,源码请看:LettuceConnectionFactory 3.修改命令超时时间,请手动修改配置构造器中的配置:LettucePoolingClientConfiguration.LettucePoolingClientConfigurationBuilder 中的setCommandTime