随机算法2
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)=(1−m1)nk≈e−mnk。
- 假阳的概率 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(fasle−positive)=(1−P(i=0))k≈(1−em−nk)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 S1∩S2可以通过数组减法实现。 S 1 ∪ S 2 S_1 \cup S_2 S1∪S2可以通过加法实现。
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)=(∑ai∗2i−1)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)=(∑bi∗a2i−1)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 a−b 整除 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=∑ai∗2i−1, b = ∑ b i ∗ a 2 i − 1 b=\sum b_i *a2^{i-1} b=∑bi∗a2i−1 => a − b < 2 n a-b< 2^n a−b<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+m−1。
- 关键在于设计 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 n−m+1次, O ( 1 n ) O(\frac{1}{n}) O(n1)。
3.2
拉斯维加斯算法只有0和1。
因此蒙特卡洛算法判断之后再进行精确判断。