随机算法作业 2

随机算法作业 2,主要是『球和箱子模型』的相关题目。

2.1

习题 2.1

两两独立

只需证明

P(Xij=x1Xkl=x2)=P(Xij=x1)P(Xkl=x2),i<j,k<lk=il=j(1)P(X_{ij}=x_1 \cap X_{kl} = x_2) = P(X_{ij}=x_1) \cdot P(X_{kl} = x_2), i < j, k < l, 当k =i 和 l = j 不同时成立 \tag{1}

根据已知条件,各次投掷之间是【相互独立】的,用 XiX_i 表示第 ii 次的投掷结果(0 为反面,1 为正面)

P(XiXj)=P(Xi)P(Xj)P(X_i \cap \cdots \cap X_j) = P(X_i) \cdot \cdots \cdot P(X_j)

证明:

先证明 i,j,k,li, j, k, l 都不相等的情况:

P(Xij=x1Xkl=x2)=P[(XiXj=1x1)(XkXl=1x2)]=xi=0,1;xk=0,1P{Xi=xiXj=[(1x1)xi]Xk=xkXl=[(1x2)xk]}=xi=0,1;xk=0,1P(Xi=xi)P{Xj=[(1x1)xi]}P(Xk=xk)P{Xl=[(1x2)xk]}=xi=0,1;xk=0,1P{Xi=xiXj=[(1x1)xi]}P{Xk=xkXl=[(1x2)xk]}={xi=0,1P{Xi=xiXj=[(1x1)xi]}}{xk=0,1P{Xk=xkXl=[(1x2)xk]}}=P(Xij=x1)P(Xkl=x2)\begin{aligned} P(X_{ij}=x_1 \cap X_{kl} = x_2) &= P[(X_i \oplus X_j = 1 - x_1)\cap (X_k \oplus X_l = 1 - x_2)] \\ &= \sum_{x_i=0,1;x_k=0,1} P\{X_i = x_i \cap X_j = [(1-x_1) \oplus x_i] \cap X_k = x_k \cap X_l = [(1-x_2) \oplus x_k]\} \\ &\xlongequal{相互独立} \sum_{x_i=0,1;x_k=0,1} P(X_i = x_i) \cdot P\{X_j = [(1-x_1) \oplus x_i]\} \cdot P(X_k = x_k) \cdot P\{X_l = [(1-x_2) \oplus x_k]\} \\ &\xlongequal{两两独立} \sum_{x_i=0,1;x_k=0,1} P\{X_i = x_i \cap X_j = [(1-x_1) \oplus x_i]\} \cdot P\{X_k = x_k \cap X_l = [(1-x_2) \oplus x_k]\} \\ &\xlongequal{去除求和符号中的无关项} \left\{\sum_{x_i=0,1} P\{X_i = x_i \cap X_j = [(1-x_1) \oplus x_i]\}\right\} \cdot \\ & \quad \quad \quad \quad \quad \quad \quad \quad \quad \quad \quad \left\{\sum_{x_k=0,1} P\{X_k = x_k \cap X_l = [(1-x_2) \oplus x_k]\}\right\} \\ &= P(X_{ij}=x_1) \cdot P(X_{kl} = x_2) \end{aligned}

下面考虑特殊情况,

  1. 如果 k=jk=j,证明过程中可以消掉 XjX_j 项,证明过程如下:

    P(Xij=x1Xkl=x2)=P[(XiXk=1x1)(XkXl=1x2)]=xi=0,1;xk=0,1P{Xi=xiXk=[(1x1)xi]Xk=xkXl=[(1x2)xk]}=xi=0,1;xk=[(1x1)xi]P{Xi=xiXk=xkXl=[(1x2)xk]}=xi=0,1;xk=[(1x1)xi]P(Xi=xi)P(Xk=xk)P{Xl=[(1x2)xk]}=xi=0,1;xk=[(1x1)xi]121212=14(2)\begin{aligned} P(X_{ij}=x_1 \cap X_{kl} = x_2) &= P[(X_i \oplus X_k = 1 - x_1)\cap (X_k \oplus X_l = 1 - x_2)] \\ &= \sum_{x_i=0,1;x_k=0,1} P\{X_i = x_i \cap X_k = [(1-x_1) \oplus x_i] \cap X_k = x_k \cap X_l = [(1-x_2) \oplus x_k]\} \\ &= \sum_{x_i=0,1;x_k=[(1-x_1) \oplus x_i]} P\{X_i = x_i \cap X_k = x_k \cap X_l = [(1-x_2) \oplus x_k]\} \\ &\xlongequal{相互独立} \sum_{x_i=0,1;x_k=[(1-x_1) \oplus x_i]} P(X_i = x_i) \cdot P(X_k = x_k) \cdot P\{X_l = [(1-x_2) \oplus x_k]\} \\ &\xlongequal{运用无偏条件}\sum_{x_i=0,1;x_k=[(1-x_1) \oplus x_i]} \frac{1}{2} \frac{1}{2} \frac{1}{2} \\ &= \frac{1}{4} \tag{2} \end{aligned}

    再从 P(Xij=x1)P(Xkl=x2)P(X_{ij}=x_1) \cdot P(X_{kl} = x_2) 开始推导一下

    P(Xij=x1)P(Xkl=x2)=P(Xik=x1)P(Xkl=x2)=P[(XiXk=1x1)]P[(XkXl=1x2)]=xk=0,1{P{Xk=xkXi=[(1x1)xk]}}xk=0,1{P{Xk=xkXl=[(1x2)xk]}}=xk=0,1,xs=0,1{P{Xk=xkXi=[(1x1)xk]}P{Xk=xsXl=[(1x2)xs]}}=xk=0,1,xs=0,1{P(Xk=xk)P(Xi=[(1x1)xk])P(Xk=xs)P(Xl=[(1x2)xs])}=xk=0,1,xs=0,1{12121212}=14(3)\begin{aligned} P(X_{ij}=x_1) \cdot P(X_{kl} = x_2) &= P(X_{ik}=x_1) \cdot P(X_{kl} = x_2) \\ &= P[(X_i \oplus X_k = 1 - x_1)] \cdot P[(X_k \oplus X_l = 1 - x_2)] \\ &= \sum_{x_k=0,1} \left\{P\left\{X_k = x_k \cap X_i = [(1-x_1) \oplus x_k]\right\}\right\} \cdot \sum_{x_k=0,1}\left\{P\left\{X_k = x_k \cap X_l = [(1-x_2) \oplus x_k]\right\}\right\} \\ &= \sum_{x_k=0,1,x_s=0,1} \left\{P\left\{X_k = x_k \cap X_i = [(1-x_1) \oplus x_k]\right\} P\left\{X_k = x_s \cap X_l = [(1-x_2) \oplus x_s]\right\} \right\} \\ &= \sum_{x_k=0,1,x_s=0,1} \left\{P(X_k = x_k) \cdot P(X_i = [(1-x_1) \oplus x_k]) \cdot P(X_k = x_s) \cdot P(X_l = [(1-x_2) \oplus x_s]) \right\} \\ &\xlongequal{运用无偏条件} \sum_{x_k=0,1,x_s=0,1} \left\{\frac{1}{2} \cdot \frac{1}{2} \cdot \frac{1}{2} \cdot \frac{1}{2} \right\} \\ &= \frac{1}{4} \tag{3} \end{aligned}

    得到式 (2)(2) 和 式 (3)(3) 相等。

  2. 如果 k=ik=i,证明是类似的。

  3. 如果 l=jl=j,证明是类似的。

综上所述,(1)(1) 式成立,即 XijX_{ij} 之间两两独立。

不相互独立

这很显然,因为 X13X_{13} 是完全依赖于 X12X_{12}X23X_{23} 的。

P(X13=1)=P(X1=X3)=P[(X1=X2)(X2=X3)]+P[(X1X2)(X2X3)]=P(X12=1X23=1)+P(X12=0X23=0)=XijP(X12=1)P(X23=1)+P(X12=0)P(X23=0)\begin{aligned} P(X_{13}=1) &= P(X_1 = X_3) \\ &= P[(X_1 = X_2) \cap (X_2 = X_3)] + P[(X_1 \neq X_2) \cap (X_2 \neq X_3)] \\ &= P(X_{12}=1\cap X_{23}=1) + P(X_{12}=0\cap X_{23}=0) \\ &\xlongequal{X_{ij} 之间的独立关系} P(X_{12}=1)P(X_{23}=1) + P(X_{12}=0)P(X_{23}=0) \end{aligned}

也就是说,

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)\begin{aligned} P(X_{12}=1,X_{23}=1,X_{13}=1) &= P(X_{12}=1,X_{23}=1) \\ &= P(X_{12}=1)\cdot P(X_{23}=1) \\ &\neq P(X_{12}=1)\cdot P(X_{23}=1) \cdot P(X_{13}=1) \end{aligned}

故相互独立不成立。

2.2

习题 2.2

有一个很类似的题《概率与计算》习题 5.8,可以看一下,原题与答案如下:

题目中的【两两独立】必须改为【相互独立】,不然无法证明,下面在相互独立的条件下进行证明。

相比于课堂上所讲的,这里的唯一变化是输入值的值域从 [0,1)[0, 1) 变为了 [0,2k)[0, 2^k)。我么只需把 [0,2k)[0, 2^k) 映射到课堂上所讲的 [0,1)[0, 1) 即可。

  1. 初始化 nn 个桶,编号介于 [0,n1)[0, n-1) 之间;
  2. 扫描输入,将数值 A[i]A[i] 放入编号为 nA[i]2k\lfloor n\frac{A[i]}{2^k} \rfloor 的桶中;
  3. 将各个桶内的数据各自排列;
  4. 依编号递增顺序输出各个桶内的数据。

时间复杂度分析

散列过程可以视为将 nn 个球投入 nn 个箱子中,设 XiX_i 表示箱子 ii 中的球的数量,由各个数的选取是相互独立的,均匀分布在 [0,2k)[0, 2^k) 内,并且式子 nA[i]2k\lfloor n\frac{A[i]}{2^k} \rfloor 将产生 [0,2k)[0, 2^k)[0,n)[0, n) 的均匀映射,得到 XiX_i 服从参数为 (n,1n)(n, \frac{1}{n}) 的二项分布,各 XiX_i 不独立。

由二项分布的结论

均值

E(Xi)=np=1E(X_i) = np = 1

方差

D(Xi)=np(1p)=11nD(X_i) = np(1-p) = 1-\frac{1}{n}

进而

E(Xi2)=D(Xi)+E2(Xi)=21n\begin{aligned} E(X_i^2) &= D(X_i) + E^2(X_i) \\ &= 2-\frac{1}{n} \end{aligned}

在每个桶内,对所有元素进行 InsertSort 所需的最坏时间复杂度为 O(Xi22)O(\frac{X_i^2}{2}),期望为 O[E(Xi22)]=O[12E(Xi2)]O[E(\frac{X_i^2}{2})] = O[\frac{1}{2}E(X_i^2)]

总时间复杂度期望为

E[T(n)]=i=1nO[12E(Xi2)]=O[n2(21n)]=O(n12)=O(n)\begin{aligned} E[T(n)] &= \sum_{i=1}^nO[\frac{1}{2}E(X_i^2)] \\ &= O[\frac{n}{2}(2-\frac{1}{n})] \\ &= O(n - \frac{1}{2}) \\ &= O(n) \end{aligned}

2.3

习题 2.3

这是一个生日悖论问题,假设某个省的总人数为 PPkk[0,9)[0,9) 之间的数能够表示 10k10^k 不同的编号,再加上中间 8 位生日,不妨以 100 年来计算,一共有 100×365=36,500100 \times 365 = 36,500 种情况,每个人的生日是均匀独立地分布的,kk 位数字也是随机选取的,所以每个编号都是独立等可能地被选取,符合生日悖论的条件。

给省里的每一个人编一个号,也就是说有 m=Pm = P 个球,要放入 n=36,500×10kn = 36,500 \times 10^k 个箱子中,要保证【没有两个人有同一个身份证号】的概率至少为 99%,根据生日悖论,有:

em22n0.99e^{-\frac{m^2}{2n}} \ge 0.99

解得:

nm22ln10.9910kP273000ln10.99\begin{aligned} n &\ge \frac{m^2}{2\ln \frac{1}{0.99}} \\ 10^k &\ge \frac{P^2}{73000\ln \frac{1}{0.99}} \\ \end{aligned}

我们取哈尔滨的总人口 955 万 来进行计算得到:

10k1.24309×101110^k \ge 1.24309 \times 10^{11}

所以 k 的取值为 12 才行。

这里的 k 明显大于实际情况中的取值 4,这是因为现实生活中身份证编号的最后 4 位不是随机生成的,而是对于同年同日出生的情况,不再使用已经生成过的编号。

还有一种思路是按照每个地区每天的出生人口来算,这样就不用管中间 8 位生日了。

2.4

习题 2.4

(1)

第 i 次 Insert(x) 需要探查的存储位置个数为随机变量 XiX_i

P(Xi=a)=P{A[h(x,0)]NULLA[h(x,a1)]NULLA[h(x,a)]=NULL}(1)\begin{aligned} P(X_i=a) &= P\{A[h(x,0)]\neq NULL \land \cdots \\ &\quad \land A[h(x,a-1)]\neq NULL \land A[h(x,a)]= NULL\} \end{aligned} \tag{1}

因为共有 i1i-1 个数据项,hh 均匀独立,且总共有 2n2n 种取值,那么:

P{A[h(x,i)]NULL}=i12nP\{A[h(x,i)]\neq NULL\} = \frac{i-1}{2n}

再由独立性,得到:

P(Xi=a)=(i12n)a1(1i12n)=(i1)a1(2ni+1)(1n)a(12)a\begin{aligned} P(X_i=a) &= \left(\frac{i-1}{2n}\right)^{a-1}\left(1-\frac{i-1}{2n}\right) \\ &= (i-1)^{a-1}(2n-i+1)\left(\frac{1}{n}\right)^a\left(\frac{1}{2}\right)^a \end{aligned}

只需证明:

(i1)a1(2ni+1)(1n)a1(i-1)^{a-1}(2n-i+1)\left(\frac{1}{n}\right)^a \le 1

左边对 ii 求导得到:

(1n)a((a1)(2ni+1)(i1)a2(i1)a1)>0\left(\frac{1}{n}\right)^a\left(\left(a-1\right)\left(2n-i+1\right)\left(i-1\right)^{a-2}-\left(i-1\right)^{a-1}\right)\quad > 0

也就是说 P(X1=a)P(X2=a)P(Xn=a)=(n12n)a1(n12n)a(12)a1(12)a=(12)aP(X_1=a)\le P(X_2=a)\le \cdots \le P(X_n=a) = \left(\frac{n-1}{2n}\right)^{a-1}-\left(\frac{n-1}{2n}\right)^a \le \left(\frac{1}{2}\right)^{a-1}-\left(\frac{1}{2}\right)^{a}=\left(\frac{1}{2}\right)^{a}

最后一步放缩需要用到 f(x)=xa1xaf(x) = x^{a-1} - x^a 的导数为 xa2(axa+1)-x^{a-2}\left(ax-a+1\right),令其大于 0 得 x<11ax < 1-\frac{1}{a},注意有一个特例是 P(X1=1)=1P(X_1=1)=1,不满足上式。只要 a2a \ge 2,上式一定成立。

(2)

利用上一问的结论,同时还需认识到 P(Xi>2logn)P(Xi=2logn)P(X_i >2\log n) \le P(X_i =\lfloor 2\log n\rfloor),这是因为有下式成立:

(i12n)a(i12n)a+1+(i12n)a+1(i12n)a+2+(i12n)a1(i12n)a\left(\frac{i-1}{2n}\right)^{a}-\left(\frac{i-1}{2n}\right)^{a+1} + \left(\frac{i-1}{2n}\right)^{a+1}-\left(\frac{i-1}{2n}\right)^{a+2} + \cdots \le \left(\frac{i-1}{2n}\right)^{a-1}-\left(\frac{i-1}{2n}\right)^a

也就是说 Xi=a+1,a+2,,a+3,X_i=a+1, a+2, \cdots, a+3, \cdots 的概率之和小于等于 Xi=aX_i=a 的概率。

P(Xi>2logn)P(Xi=2logn)(12)2logn=(12logn)2=21n2\begin{aligned} P(X_i >2\log n) &\le P(X_i =\lfloor 2\log n\rfloor) \\ &\le (\frac{1}{2})^{2\log n} \\ &= (\frac{1}{2^{\log n}})^2 \\ &\xlongequal{默认底数为 2} \frac{1}{n^2} \end{aligned}

(3)

P(X>2logn)=P(maxiXi>2logn)=P(Xi,Xi>2logn)=P(X1>2lognX2>2lognXn>2logn)P(X1>2logn)+P(X2>2logn)++P(Xn>2logn)n1n2=1n\begin{aligned} P(X >2\log n) &= P(\max_{i}X_i >2\log n) \\ &= P( \exists X_i, X_i >2\log n) \\ &= P(X_1 > 2 \log n \lor X_2 > 2 \log n \lor \cdots \lor X_n > 2 \log n) \\ &\le P(X_1>2\log n) + P(X_2>2\log n) + \cdots + P(X_n>2\log n) \\ &\le n \cdot \frac{1}{n^2} = \frac{1}{n} \end{aligned}

(4)

E(X)=i=1nP(X=i)i=i=2logni=1nP(X=2logn)2logni=1nP(X>2logn)2lognn1n2logn=O(logn)\begin{aligned} E(X) &= \sum_{i=1}^{n} P(X=i)\cdot i \\ &\xlongequal{i=\lceil2\log n\rceil} \sum_{i=1}^{n} P(X=\lceil2\log n\rceil)\cdot \lceil2\log n\rceil \\ &\le \sum_{i=1}^{n} P(X>2\log n)\cdot \lceil2\log n\rceil \\ &\le n \cdot \frac{1}{n} \cdot 2 \log n \\ &= O(\log n) \end{aligned}

2.5

习题 2.5

更新:用 LSH 评判集合相似性,可以达到 nlnnn \ln n 的复杂度。

听众相当于箱子,歌曲相当于球,每个球可以被扔进多个箱子,如果箱子之间相似球的个数越多,那么证明箱子越『口味趋于相同』。

位运算算法

为每一个听众分配 m 位二进制数,第 i 位表示第 i 首歌曲是否在听众的歌曲列表里(在为 1,不在为 0),两两之间做逻辑与运算,将得到的结果(做与运算后1的个数)存放在对角矩阵中,进行排序。最后按递减排序输出听众对和共同喜欢的歌曲总数即可。

维护一个三角矩阵 AAAijA_{ij} 表示听众 ii 和听众 jj 所共同喜欢的歌曲的数量,令 Aii=0A_{ii} = 0。对矩阵元素进行排序即可。

空间复杂度:二进制数加上对角矩阵为 O(n+n2)=O(n2)O(n+n^2)=O(n^2)。时间复杂度上,因为不仅双层循环遍历所有听众,需要时间为 O(n2)O(n^2),还要对 n22\frac{n^2}{2} 个元素进行排序,时间为 O(n2logn)O(n^2\log n),效率非常低下。

双射问题

课堂上所讲的生日悖论、赠券收集分别是单射和满射,这里我们分析的是双射问题。

我们记 XijX_{ij} 为听众 ii 是否喜欢歌曲 jj,喜欢表示为 1,不喜欢表示为 0。

我们的目的是寻找 Yi1i2=jXi1jXi2jY_{i_1i_2} = \sum_jX_{i_1j}X_{i_2j} 最大的 i1,i2i_1, i_2,或者说将所有 Yi1i2Y_{i_1i_2} 降序输出。

假设:每名听众喜欢的歌曲数量是随机的,喜欢哪些歌曲也是随机选取的。

那么 Xi1jX_{i_1j}Xi2jX_{i_2j} 就是相互独立的,且

E(Xi1j)=121+120=12E(X_{i_1j}) = \frac{1}{2} \cdot 1 + \frac{1}{2} \cdot 0 = \frac{1}{2}

那么

E(Xi1jXi2j)=E(Xi1j)E(Xi2j)=14E(X_{i_1j}X_{i_2j}) = E(X_{i_1j})E(X_{i_2j}) = \frac{1}{4}

E(jXi1jXi2j)=m4E(\sum_jX_{i_1j}X_{i_2j}) = \frac{m}{4}

根据上面这个式子我们可以知道两个人同时喜欢歌曲的总数平均数为 m4\frac{m}{4},我们可以认为当两位听众同时喜欢的歌曲数大于 m2\frac{m}{2} 时,它们具有相同口味。

由马尔可夫不等式

P(Yi1i2>m2)12P(Y_{i_1i_2} > \frac{m}{2}) \le \frac{1}{2}

这样,两个人具有相同口味的概率不超过 12\frac{1}{2}

采用上面的位运算算法,直接输出超过 m2\frac{m}{2} 的结果即可,时间复杂度为 O(n2)O(n^2)

文章作者: upupming
文章链接: https://upupming.site/2019/05/04/randomized-algorithm-ex2/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 upupming 的博客