随机算法作业 2,主要是『球和箱子模型』的相关题目。
2.1
两两独立
只需证明
P(Xij=x1∩Xkl=x2)=P(Xij=x1)⋅P(Xkl=x2),i<j,k<l,当k=i和l=j不同时成立(1)
根据已知条件,各次投掷之间是【相互独立】的,用 Xi 表示第 i 次的投掷结果(0 为反面,1 为正面)
P(Xi∩⋯∩Xj)=P(Xi)⋅⋯⋅P(Xj)
证明:
先证明 i,j,k,l 都不相等的情况:
P(Xij=x1∩Xkl=x2)=P[(Xi⊕Xj=1−x1)∩(Xk⊕Xl=1−x2)]=xi=0,1;xk=0,1∑P{Xi=xi∩Xj=[(1−x1)⊕xi]∩Xk=xk∩Xl=[(1−x2)⊕xk]}相互独立xi=0,1;xk=0,1∑P(Xi=xi)⋅P{Xj=[(1−x1)⊕xi]}⋅P(Xk=xk)⋅P{Xl=[(1−x2)⊕xk]}两两独立xi=0,1;xk=0,1∑P{Xi=xi∩Xj=[(1−x1)⊕xi]}⋅P{Xk=xk∩Xl=[(1−x2)⊕xk]}去除求和符号中的无关项{xi=0,1∑P{Xi=xi∩Xj=[(1−x1)⊕xi]}}⋅{xk=0,1∑P{Xk=xk∩Xl=[(1−x2)⊕xk]}}=P(Xij=x1)⋅P(Xkl=x2)
下面考虑特殊情况,
-
如果 k=j,证明过程中可以消掉 Xj 项,证明过程如下:
P(Xij=x1∩Xkl=x2)=P[(Xi⊕Xk=1−x1)∩(Xk⊕Xl=1−x2)]=xi=0,1;xk=0,1∑P{Xi=xi∩Xk=[(1−x1)⊕xi]∩Xk=xk∩Xl=[(1−x2)⊕xk]}=xi=0,1;xk=[(1−x1)⊕xi]∑P{Xi=xi∩Xk=xk∩Xl=[(1−x2)⊕xk]}相互独立xi=0,1;xk=[(1−x1)⊕xi]∑P(Xi=xi)⋅P(Xk=xk)⋅P{Xl=[(1−x2)⊕xk]}运用无偏条件xi=0,1;xk=[(1−x1)⊕xi]∑212121=41(2)
再从 P(Xij=x1)⋅P(Xkl=x2) 开始推导一下
P(Xij=x1)⋅P(Xkl=x2)=P(Xik=x1)⋅P(Xkl=x2)=P[(Xi⊕Xk=1−x1)]⋅P[(Xk⊕Xl=1−x2)]=xk=0,1∑{P{Xk=xk∩Xi=[(1−x1)⊕xk]}}⋅xk=0,1∑{P{Xk=xk∩Xl=[(1−x2)⊕xk]}}=xk=0,1,xs=0,1∑{P{Xk=xk∩Xi=[(1−x1)⊕xk]}P{Xk=xs∩Xl=[(1−x2)⊕xs]}}=xk=0,1,xs=0,1∑{P(Xk=xk)⋅P(Xi=[(1−x1)⊕xk])⋅P(Xk=xs)⋅P(Xl=[(1−x2)⊕xs])}运用无偏条件xk=0,1,xs=0,1∑{21⋅21⋅21⋅21}=41(3)
得到式 (2) 和 式 (3) 相等。
-
如果 k=i,证明是类似的。
-
如果 l=j,证明是类似的。
综上所述,(1) 式成立,即 Xij 之间两两独立。
不相互独立
这很显然,因为 X13 是完全依赖于 X12 和 X23 的。
P(X13=1)=P(X1=X3)=P[(X1=X2)∩(X2=X3)]+P[(X1=X2)∩(X2=X3)]=P(X12=1∩X23=1)+P(X12=0∩X23=0)Xij之间的独立关系P(X12=1)P(X23=1)+P(X12=0)P(X23=0)
也就是说,
P(X12=1,X23=1,X13=1)=P(X12=1,X23=1)=P(X12=1)⋅P(X23=1)=P(X12=1)⋅P(X23=1)⋅P(X13=1)
故相互独立不成立。
2.2
有一个很类似的题《概率与计算》习题 5.8,可以看一下,原题与答案如下:
题目中的【两两独立】必须改为【相互独立】,不然无法证明,下面在相互独立的条件下进行证明。
相比于课堂上所讲的,这里的唯一变化是输入值的值域从 [0,1) 变为了 [0,2k)。我么只需把 [0,2k) 映射到课堂上所讲的 [0,1) 即可。
- 初始化 n 个桶,编号介于 [0,n−1) 之间;
- 扫描输入,将数值 A[i] 放入编号为 ⌊n2kA[i]⌋ 的桶中;
- 将各个桶内的数据各自排列;
- 依编号递增顺序输出各个桶内的数据。
时间复杂度分析
散列过程可以视为将 n 个球投入 n 个箱子中,设 Xi 表示箱子 i 中的球的数量,由各个数的选取是相互独立的,均匀分布在 [0,2k) 内,并且式子 ⌊n2kA[i]⌋ 将产生 [0,2k) 到 [0,n) 的均匀映射,得到 Xi 服从参数为 (n,n1) 的二项分布,各 Xi 不独立。
由二项分布的结论
均值
E(Xi)=np=1
方差
D(Xi)=np(1−p)=1−n1
进而
E(Xi2)=D(Xi)+E2(Xi)=2−n1
在每个桶内,对所有元素进行 InsertSort 所需的最坏时间复杂度为 O(2Xi2),期望为 O[E(2Xi2)]=O[21E(Xi2)]。
总时间复杂度期望为
E[T(n)]=i=1∑nO[21E(Xi2)]=O[2n(2−n1)]=O(n−21)=O(n)
2.3
这是一个生日悖论问题,假设某个省的总人数为 P,k 位 [0,9) 之间的数能够表示 10k 不同的编号,再加上中间 8 位生日,不妨以 100 年来计算,一共有 100×365=36,500 种情况,每个人的生日是均匀独立地分布的,k 位数字也是随机选取的,所以每个编号都是独立等可能地被选取,符合生日悖论的条件。
给省里的每一个人编一个号,也就是说有 m=P 个球,要放入 n=36,500×10k 个箱子中,要保证【没有两个人有同一个身份证号】的概率至少为 99%,根据生日悖论,有:
e−2nm2≥0.99
解得:
n10k≥2ln0.991m2≥73000ln0.991P2
我们取哈尔滨的总人口 955 万 来进行计算得到:
10k≥1.24309×1011
所以 k 的取值为 12 才行。
这里的 k 明显大于实际情况中的取值 4,这是因为现实生活中身份证编号的最后 4 位不是随机生成的,而是对于同年同日出生的情况,不再使用已经生成过的编号。
还有一种思路是按照每个地区每天的出生人口来算,这样就不用管中间 8 位生日了。
2.4
(1)
第 i 次 Insert(x) 需要探查的存储位置个数为随机变量 Xi,
P(Xi=a)=P{A[h(x,0)]=NULL∧⋯∧A[h(x,a−1)]=NULL∧A[h(x,a)]=NULL}(1)
因为共有 i−1 个数据项,h 均匀独立,且总共有 2n 种取值,那么:
P{A[h(x,i)]=NULL}=2ni−1
再由独立性,得到:
P(Xi=a)=(2ni−1)a−1(1−2ni−1)=(i−1)a−1(2n−i+1)(n1)a(21)a
只需证明:
(i−1)a−1(2n−i+1)(n1)a≤1
左边对 i 求导得到:
(n1)a((a−1)(2n−i+1)(i−1)a−2−(i−1)a−1)>0
也就是说 P(X1=a)≤P(X2=a)≤⋯≤P(Xn=a)=(2nn−1)a−1−(2nn−1)a≤(21)a−1−(21)a=(21)a
最后一步放缩需要用到 f(x)=xa−1−xa 的导数为 −xa−2(ax−a+1),令其大于 0 得 x<1−a1,注意有一个特例是 P(X1=1)=1,不满足上式。只要 a≥2,上式一定成立。
(2)
利用上一问的结论,同时还需认识到 P(Xi>2logn)≤P(Xi=⌊2logn⌋),这是因为有下式成立:
(2ni−1)a−(2ni−1)a+1+(2ni−1)a+1−(2ni−1)a+2+⋯≤(2ni−1)a−1−(2ni−1)a
也就是说 Xi=a+1,a+2,⋯,a+3,⋯ 的概率之和小于等于 Xi=a 的概率。
P(Xi>2logn)≤P(Xi=⌊2logn⌋)≤(21)2logn=(2logn1)2默认底数为2n21
(3)
P(X>2logn)=P(imaxXi>2logn)=P(∃Xi,Xi>2logn)=P(X1>2logn∨X2>2logn∨⋯∨Xn>2logn)≤P(X1>2logn)+P(X2>2logn)+⋯+P(Xn>2logn)≤n⋅n21=n1
(4)
E(X)=i=1∑nP(X=i)⋅ii=⌈2logn⌉i=1∑nP(X=⌈2logn⌉)⋅⌈2logn⌉≤i=1∑nP(X>2logn)⋅⌈2logn⌉≤n⋅n1⋅2logn=O(logn)
2.5
更新:用 LSH 评判集合相似性,可以达到 nlnn 的复杂度。
听众相当于箱子,歌曲相当于球,每个球可以被扔进多个箱子,如果箱子之间相似球的个数越多,那么证明箱子越『口味趋于相同』。
位运算算法
为每一个听众分配 m 位二进制数,第 i 位表示第 i 首歌曲是否在听众的歌曲列表里(在为 1,不在为 0),两两之间做逻辑与运算,将得到的结果(做与运算后1的个数)存放在对角矩阵中,进行排序。最后按递减排序输出听众对和共同喜欢的歌曲总数即可。
维护一个三角矩阵 A,Aij 表示听众 i 和听众 j 所共同喜欢的歌曲的数量,令 Aii=0。对矩阵元素进行排序即可。
空间复杂度:二进制数加上对角矩阵为 O(n+n2)=O(n2)。时间复杂度上,因为不仅双层循环遍历所有听众,需要时间为 O(n2),还要对 2n2 个元素进行排序,时间为 O(n2logn),效率非常低下。
双射问题
课堂上所讲的生日悖论、赠券收集分别是单射和满射,这里我们分析的是双射问题。
我们记 Xij 为听众 i 是否喜欢歌曲 j,喜欢表示为 1,不喜欢表示为 0。
我们的目的是寻找 Yi1i2=∑jXi1jXi2j 最大的 i1,i2,或者说将所有 Yi1i2 降序输出。
假设:每名听众喜欢的歌曲数量是随机的,喜欢哪些歌曲也是随机选取的。
那么 Xi1j 和 Xi2j 就是相互独立的,且
E(Xi1j)=21⋅1+21⋅0=21
那么
E(Xi1jXi2j)=E(Xi1j)E(Xi2j)=41
E(j∑Xi1jXi2j)=4m
根据上面这个式子我们可以知道两个人同时喜欢歌曲的总数平均数为 4m,我们可以认为当两位听众同时喜欢的歌曲数大于 2m 时,它们具有相同口味。
由马尔可夫不等式
P(Yi1i2>2m)≤21
这样,两个人具有相同口味的概率不超过 21。
采用上面的位运算算法,直接输出超过 2m 的结果即可,时间复杂度为 O(n2)。