练习 4-2 解答

Problem 1 (教材习题 5.3-3)

假设我们不是将元素 A[i]A[i] 与子数组 A[i..n]A[i..n] 中的一个随机元素交换,而是将它与数组任何位置上的随机元素交换:

这段代码会产生一个均匀随机排列吗?为什么会或为什么不会?

Solution

不会。反例:例如 n=3n = 3 的情况,从古典概型的角度考虑:

  • 由于每次和整个数组中的一个任意随机元素交换,所以共有 33=273^3 = 27 种等可能的基本事件(不同基本事件的排列结果可重复);

  • 但是 n=3n = 3 时只会有 3!=63! = 6 种排列, 66 并不整除 2727 ,因此所有排列结果分到的基本事件不可能一样多,也就不可能等可能,从而不是均匀随机排列。

Problem 2 (教材习题 5.3-5)

证明:在过程 PERMUTE-BY-SORTING (见第4讲PPT第16页)的数组 PP 中,所有元素都唯一的概率至少是 11/n1 - 1/n

Solution

P[i]=P[j]P[i] = P[j] 为事件 XijX_{ij} ,由于 P[i]P[i]P[j]P[j]11n3n^3 之间的随机数,我们有:

Pr{Xij}=r=1n3Pr{P[i]=r,P[j]=r}=r=1n3Pr{P[i]=r}Pr{P[j]=r}=r=1n31n31n3=1n3Pr{X_{ij}} = \sum_{r = 1}^{n^3}Pr{P[i] = r, P[j] = r} = \sum_{r=1}^{n^3}Pr{P[i] = r}Pr{P[j] = r}\
= \sum_{r=1}^{n^3}\frac{1}{n^3}\cdot\frac{1}{n^3} = \frac{1}{n^3}

PP 中存在某两个相等的元素为事件 XX ,则 X=i<jXijX = \bigcup_{i<j}X_{ij} ,且任意两个 XijX_{ij} 之间不相交,故而

Pr{X}=Pr{i<jXij}=i=1n1j=i+1nPr{Xij}=i=1n1j=i+1n1n3=n(n1)2n3=n12n2<nn2=1nPr{X} = Pr{\bigcup_{i<j}X_{ij}} = \sum_{i=1}^{n-1}\sum_{j=i+1}^{n}Pr{X_{ij}} = \sum_{i=1}^{n-1}\sum_{j=i+1}^{n}\frac{1}{n^3}\
=\frac{n(n-1)}{2n^3} = \frac{n-1}{2n^2} < \frac{n}{n^2} = \frac{1}{n}

因此,所有元素都唯一的概率为 Pr{X}=1Pr{X}>11/nPr{\overline{X}} = 1 - Pr{X} > 1 - 1/n

Problem 3 (教材习题 5.3-7)

假设我们希望创建集合 {1,2,3,,n}{1, 2, 3, \cdots, n} 的一个 随机样本 ,即一个具有 mm 个元素的集合 SS ,其中 0mn0 \le m \le n ,使得每个 mm 集合能够等可能地创建。

一种方法是对 i=1,2,...,ni = 1, 2, …, nA[i]=iA[i] = i ,调用 RANDOMIZE-IN-PLACE(A)\text{RANDOMIZE-IN-PLACE}(A) ,然后取最前面的 mm 个元素。这种方法会对 RANDOM\text{RANDOM} 过程调用 nn 次。

如果 nnmm 大很多,我们希望能够创建一个随机样本,但是对 RANDOM\text{RANDOM} 调用更少的次数。请说明下面的递归过程返回 {1,2,3,,n}{1, 2, 3, \cdots, n} 的一个随机 mm 子集 SS ,其中每个 mm 子集是等可能的,然而只对 RANDOM\text{RANDOM} 调用 mm 次。

Solution

记算法2在接受输入 m,nm, n 时调用 T(m,n)T(m, n)RANDOM\text{RANDOM} ,我们不难看出:

  • T(0,0)=1T(0,0) = 1T(m,n)=T(m1,n1)+1T(m, n) = T(m - 1, n-1) + 1

  • 解这个递归式有 T(m,n)=mT(m, n) = m ,因此算法2只对 RANDOM\text{RANDOM} 调用 mm 次。

下面我们使用数学归纳法来证明 RandomSample(m,n)\text{RandomSample}(m, n) 的正确性:

mm 进行归纳,证明对于所有的 nmn \ge m ,任意 1jn1 \le j \le nPr{jRandomSample(m,n)}=m/nPr{j \in \text{RandomSample}(m, n)} = m / n

  • 基础情况:m=0m = 0 时,Pr{jRandomSample(0,n)}=Pr{j}=0=0/nPr{j \in \text{RandomSample}(0, n)} = Pr{j \in \emptyset} = 0 = 0 / n 显然成立;

  • 归纳假设:假设 m1m - 1 时,结论成立。记 S=RandomSample(m1,n1)S = \text{RandomSample}(m - 1, n - 1) ,则有 1jn1\forall 1 \le j \le n - 1Pr{jS}=(m1)/(n1)Pr{j \in S} = (m - 1) / (n - 1)

  • 归纳步骤:记 RandomSample(m,n)\text{RandomSample}(m, n) 最终返回的集合为 SS&#x27; ,下面证明 1jn\forall 1 \le j \le nPr{jS}=m/nPr{j \in S&#x27;} = m / n

    • 考虑任意一个给定的 jj 满足 1jn1 \le j \le n ,由于 ii11nn 之间的随机数(算法2第6行),因此 Pr{i=j}=1/nPr{i = j} = 1 / n

    • 先证明 1jn11 \le j \le n - 1 时, Pr{jS}=m/nPr{j \in S&#x27;} = m / n

      • 根据算法7到10行,jSj \in S&#x27; 等价于 jSj \in S 或者 jSi=jj \notin S \wedge i = j ,因为 jnj \ne n

        • Pr{jS}=Pr{jS}+Pr{jS}Pr{i=j}=m1n1+(1m1n1)1n=mnPr{j \in S&#x27;} = Pr{j \in S} + Pr{j \notin S}\cdot Pr{i = j}\ = \frac{m-1}{n-1} + (1-\frac{m-1}{n-1})\cdot\frac{1}{n} = \frac{m}{n}
    • 最后证明 Pr{nS}=m/nPr{n \in S&#x27;} = m / n

      • 根据算法第7到12行,nSn \in S&#x27; 等价于 iSi \in S 或者 i=ni = n

      • 其中, Pr{iS}=m1nPr{i \in S} = \frac{m-1}{n} ,因为 ii 是 1 到 n 的随机数, SS 是一个 1 到 n 之间的 m1m - 1 元子集;

      • 所以 Pr{nS}=Pr{iS}+Pr{i=n}=m1n+1n=mnPr{n \in S&#x27;} = Pr{i \in S} + Pr{i = n} = \frac{m - 1}{n} + \frac{1}{n} = \frac{m}{n}

综上,对于所有的 nmn \ge m ,任意 1jn1 \le j \le nPr{jRandomSample(m,n)}=m/nPr{j \in \text{RandomSample}(m, n)} = m / n

因此,算法2返回了 nn 的一个均匀随机的 mm 子集。

Problem 4 (教材习题 5.4-2)

假设我们将球投入到 bb 个箱子里,直到某个箱子中有两个球。每一次投掷都是独立的,并且每个球落入任何箱子的机会均等。请问投球次数期望是多少?

Solution

把将球投入到箱子里视为“球在这个箱子里出生”,箱子就是球的“生日”,问题可以重新表述为:一共有 bb 个箱子,房间里需要有多少个球,才能期望有两个球的“生日”相同?

所以这个问题其实就是将“生日悖论”换了个场景而已,本质不变,根据第4讲PPT第23页,不难得到投球次数的期望为 Θ(b)\Theta(\sqrt{b})

Problem 5 (教材习题 5.4-4)

一次聚会需要邀请多少人,才能期望其中有 33 人的生日相同?

Solution

假设邀请了 mm 个人,一年有 nn 天。记其中第 i,j,ki, j, k 个人生日 bi,bj,bkb_i, b_j, b_k 相同为事件 HijkH_{ijk} ,和第4讲PPT第22页类似,有

Pr{Hijk}=r=1nPr{bi=bj=bk=r}=n1n3=1n2Pr{H_{ijk}} = \sum_{r=1}^{n}Pr{b_i = b_j = b_k = r} = n\cdot\frac{1}{n^3} = \frac{1}{n^2}

Xijk=I{Hijk}X_{ijk} = I{H_{ijk}} ,设生日相同的三人组的个数为 XX ,则

E[X]=E[i=1m2j=2m1k=3mXijk]=i=1m2j=2m1k=3mE[Xijk]=i=1m2j=2m1k=3mPr{Hijk}=i=1m2j=2m1k=3m1n2=m(m1)(m2)6n21E[X] = E[\sum_{i=1}^{m-2}\sum_{j=2}^{m-1}\sum_{k=3}^m X_{ijk}] = \sum_{i=1}^{m-2}\sum_{j=2}^{m-1}\sum_{k=3}^m E[X_{ijk}] = \sum_{i=1}^{m-2}\sum_{j=2}^{m-1}\sum_{k=3}^m Pr{H_{ijk}}\
= \sum_{i=1}^{m-2}\sum_{j=2}^{m-1}\sum_{k=3}^m \frac{1}{n^2} = \frac{m(m-1)(m-2)}{6n^2} \ge 1

不难看出 m=Θ(n2/3)m = \Theta(n^{2/3})

具体地,假设一年有 n=365n=365 天,代入有 m(m1)(m2)6×3652m(m-1)(m-2) \ge 6\times 365^2 ,解得 m94m \ge 94

Problem 6 (教材习题 5.4-5)

在大小为 nn 的集合中,一个 kk 字符串构成一个 kk 排列的概率是多少?这个问题和生日悖论有什么关系?

Solution

kk 字符串构成 kk 排列相当于 kk 字符串中的每个字符都不相同,记为事件 EE 。考虑后一个字符和前面所有的字符都不相同,应用乘法原理有:

Pr{E}=nnn1nn2nnk+1n=n!nk(nk)!Pr{E} = \frac{n}{n} \cdot \frac{n-1}{n} \cdot \frac{n-2}{n} \cdots \frac{n-k+1}{n} = \frac{n!}{n^k(n-k)!}

这是生日悖论的补问题,生日悖论相当于是希望一个 kk 字符串中存在两个相同的字符(kk 个人中有两个生日相同),本题是希望一个 kk 字符串中不存在两个相同的字符。

Problem 7 (教材习题 5.4-6)

假设将 nn 个球投入 nn 个箱子里,其中每次投球独立,并且每个球等可能落入任何箱子。空箱子的数目期望是多少?正好有一个球的箱子的数目期望是多少?

Solution

记第 ii 个箱子为空为事件 EiE_i ,相当于每次投球都没有落入这个箱子,所以 Pr{Ei}=((n1)/n)nPr{E_i} = ((n-1) /n)^n

Xi=I{Ei}X_i = I{E_i} ,空箱子的总数目为 XX ,则 X=i=1nXiX = \sum_{i=1}^{n}X_i ,所以

E[X]=E[i=1nXi]=i=1nE[Xi]=i=1nPr{Ei}=i=1n(n1n)n=n(n1n)nE[X] = E[\sum_{i=1}^{n}X_i] = \sum_{i=1}^{n}E[X_i] = \sum_{i=1}^{n}Pr{E_i} = \sum_{i=1}^{n}(\frac{n-1}{n})^n = n(\frac{n-1}{n})^n

所以,空箱子的数目期望为 n(n1n)nn(\frac{n-1}{n})^n

记第 ii 个箱子恰好有一个球为事件 FiF_i ,相当于 nn 次投球中有 1 次落入这个箱子, n1n - 1 次没有落入这个箱子,所以 Pr{Fi}=Cn1(1/n)((n1)/n)n1=((n1)/n)n1Pr{F_i} = C_n^1 (1/n) ((n-1) /n)^{n-1} = ((n-1) /n)^{n-1} (二项分布) 。

Yi=I{Fi}Y_i = I{F_i} ,恰有一个球的箱子的总数目为 YY ,则 Y=i=1nYiY = \sum_{i=1}^{n}Y_i ,所以

E[Y]=E[i=1nYi]=i=1nE[Yi]=i=1nPr{Fi}=i=1n(n1n)n1=n(n1n)n1E[Y] = E[\sum_{i=1}^{n}Y_i] = \sum_{i=1}^{n}E[Y_i] = \sum_{i=1}^{n}Pr{F_i} = \sum_{i=1}^{n}(\frac{n-1}{n})^{n-1} = n(\frac{n-1}{n})^{n-1}

所以,恰有一个球的箱子的数目期望为 n(n1n)n1n(\frac{n-1}{n})^{n-1}