算法设计第十三章 随机算法 randomed algorithm2



1 Boom filter

1.1介绍

  • 一种数据结构,管理一个集合,只支持查找与增加。
  • 不支持删除操作导致可以用更少的内存与hash table(散列表)相比
  • 假阳:实际不存在,查出存在。假阴:实际存在,查出不存在
  • boom filter 是近似的。假阳低概率,假阴几乎不存在。

1.2算法过程:

  • A为长度为m的数组,初始化全为0。k个独立的哈希函数 h 1 , . . . h k h_1,...h_k h1,...hk, map keys to{1,…m}.
  • 存储键 x x x,设置 A [ h 1 ( x ) ] , A [ h 2 ( x ) , . . . , A [ h k ( x ) ] ] A[h_1(x)],A[h_2(x),...,A[h_k(x)]] A[h1(x)],A[h2(x),...,A[hk(x)]] 为1。
  • 检测 A [ h 1 ( x ) ] , A [ h 2 ( x ) , . . . , A [ h k ( x ) ] ] A[h_1(x)],A[h_2(x),...,A[h_k(x)]] A[h1(x)],A[h2(x),...,A[hk(x)]]为1,则 x x x存在。否则不存在。因为没有删除功能,所以不存在 假阴的情况。
  • 对与假阳的情况,分析其bound,如下。

在这里插入图片描述

1.3假阳的概率:

  • 假设hash函数是随机的,插入n个键, P ( i = 0 ) = ( 1 − 1 m ) n k ≈ e − n k m P(i=0)=(1-\frac{1}{m})^{nk}\approx e^{-\frac{nk}{m}} P(i=0)=(1m1)nkemnk
  • 假阳的概率 P ( f a s l e − p o s i t i v e ) = ( 1 − P ( i = 0 ) ) k ≈ ( 1 − e − n k m ) k P(fasle-positive)=(1-P(i=0))^k\approx (1-e^{\frac{-nk}{m}})^k P(faslepositive)=(1P(i=0))k(1emnk)k
  • 最优的 k = m l n ( 2 ) n k=\frac{mln(2)}{n} k=nmln(2)
    在这里插入图片描述

1.4 改进

  • 增加删除功能。数组A记录个数而不是0和1.
  • S 1 ∩ S 2 S_1 \cap S_2 S1S2可以通过数组减法实现。 S 1 ∪ S 2 S_1 \cup S_2 S1S2可以通过加法实现。

2 String equality and fingerprinting

介绍

  • database太大,在通信过程中,验证是否相等,比较database的指纹。
  • 如果指纹不同,则database不同
  • 如果指纹相同,则database大概率相同。

2.1 算法

  • n bit 序列 ( a 1 , . . . , a n ) (a_1,...,a_n) (a1,...,an) ( b 1 , . . . b n ) (b_1,...b_n) (b1,...bn)
  • 指纹 F ( a ) = ( ∑ a i ∗ 2 i − 1 ) m o d ( p ) F(a)=(\sum a_i*2^{i-1}) mod (p) F(a)=(ai2i1)mod(p), F ( b ) = ( ∑ b i ∗ a 2 i − 1 ) m o d ( p ) F(b)=(\sum b_i *a2^{i-1})mod (p) F(b)=(bia2i1)mod(p)。只需要传输 O ( l o g p ) O(log p) O(logp)bits。
  • 如果 F ( a ) ≠ F ( b ) F(a)\not =F(b) F(a)=F(b) => a ≠ b a\not =b a=b F ( a ) = F ( b ) F(a)=F(b) F(a)=F(b)=> a = b a=b a=b or a − b a-b ab 整除 p p p

2.2 正确性

  • p增大可以减少假阳的概率,但是p增加发送比特的复杂度。
  • 任意数字 t t t,最多有 l o g 2 ( t ) log_2(t) log2(t)个离散的素数因子。
  • 给定 t t t,小于 t t t的素数个数渐进为 t l n t \frac{t}{lnt} lntt. Prime Number Theorem
  • a = ∑ a i ∗ 2 i − 1 a=\sum a_i*2^{i-1} a=ai2i1, b = ∑ b i ∗ a 2 i − 1 b=\sum b_i *a2^{i-1} b=bia2i1 => a − b < 2 n a-b< 2^n ab<2n=>小于 n n n个素数因子。
  • t = n 2 l n ( n ) t=n^2ln(n) t=n2ln(n),小于素数个数为 O ( n 2 ) O(n^2) O(n2),p是从小于t的质数中随机选的。假阳的概率 ≤ n O ( n 2 ) = O ( 1 n ) \leq \frac{n}{O(n^2)}=O(\frac{1}{n}) O(n2)n=O(n1)

3 字符串匹配

3.1

方法与第二节类似,蒙特卡罗法与拉斯维加斯算法。
在这里插入图片描述

  • X = x 1 x 2 . . . x n X=x_1x_2...x_n X=x1x2...xn X ( j ) = x j x j + 1 . . . x j + m − 1 X(j)=x_jx_{j+1}...x_{j+m-1} X(j)=xjxj+1...xj+m1
    在这里插入图片描述
  • 关键在于设计 p p p,与第二节类似。 t = n 2 l o g ( n 2 m ) t=n^2log(n^2m) t=n2log(n2m) 假阳概率 m n 2 m = 1 n 2 \frac{m}{n^2m}=\frac{1}{n^2} n2mm=n21。 进行 n − m + 1 n-m+1 nm+1次, O ( 1 n ) O(\frac{1}{n}) O(n1)

3.2

拉斯维加斯算法只有0和1。
在这里插入图片描述
因此蒙特卡洛算法判断之后再进行精确判断。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值