注:本章内容需要一定的《概率论与随机过程》课程基础。
5.1 雇用问题
5.1-1
以下翻译自https://ita.skanev.com/05/01/01.html
解:如果一个偏序关系同时又是一个全关系,则称为全序或线性序。一个偏序关系,要求满足自反性、反对称性和传递性。
假设这里的关系为 “是否一样好或更好于”,
自反性:每个应聘者都比自己好或更好。
反对称性:如果应聘者A与B一样好或更好于应聘者B,同时应聘者B又与A一样好或更好于应聘者A,则可知A和B一样好。
传递性:如果应聘者A与B一样好或更好于应聘者B,应聘者B又与C一样好或更好于应聘者C,则A与C一样好或更好于C。
所以该关系是一个偏序。又因为所有的应聘者出现的情况的关系,我们都可以判断,所以该关系又是一个全关系。因此,该关系是一个全序。
5.1-2
解:
RANDOM(a, b)
n = b - a
c = ceiling(lgn)
offset = 0
for i = 1 to c
offset = offset + b[i] * (2^i)
if offset > n
return RANDOM(a, b)
else return a + offset
O ( ln ( b − a ) ) O(\ln(b-a)) O(ln(b−a))
5.1-3
思路:生成两次有偏随机数,两数相等的概率为0.5,不相等的概率也为0.5。
解:
RANDOM
if BIASED-RANDOM == BIASED-RANDOM
return 1
else return 0
运行时间 Θ ( 1 ) \Theta(1) Θ(1)。
5.2 指示器随机变量
5.2-1
解: 1 n \frac{1}{n} n1; 1 n ! \frac{1}{n!} n!1
5.2-2
提示:过程中的求和可用积分计算。
解: 1 n ( ln ( n − 1 ) + O ( 1 ) ) \frac{1}{n}(\ln(n-1)+O(1)) n1(ln(n−1)+O(1))
5.2-3
解: 3.5 n 3.5n 3.5n
5.2-4
解:1
5.2-5
解: 1 2 A n 2 \frac{1}{2}A_n^2 21An2
5.3 随机算法
5.3-1
解:
RANDOMIZE-IN-PLACE(A)
n = A.length
swap A[1] with A[RANDOM(1, n)]
for i = 2 to n
swap A[i] with A[RANDOM(i, n)]
循环不变式的保持变为:我们假设在第i(i=2,…,n)次迭代之前,每种可能的(i-1)排列出现在子数组A[1…i-1]中的概率是(n-i+1)!/n!。
5.3-2
思路:没有实现教授的意图,当n=3时可验证。
5.3-3
思路:看似更“随机”了,但其实会产生不均匀的随机排列。均匀随机有 n ! n! n!种可能,而本题会产生 n n n^n nn种可能,在n比较小时也可以通过实验验证,一个很好的参考。
5.3-4
思路:其实很容易看出这是一个随机偏移量的循环右移,因此易证概率为1/n。
5.3-5
证明:
Pr { 1 ∩ 2 ∩ 3 ∩ … } = Pr { 1 } ⋅ Pr { 2 ∣ 1 } ⋅ Pr { 3 ∣ 1 ∩ 2 } ⋯ = 1 ( 1 − 1 n 3 ) ( 1 − 2 n 3 ) ( 1 − 3 n 3 ) ⋯ ≥ 1 ( 1 − n n 3 ) ( 1 − n n 3 ) ( 1 − n n 3 ) ⋯ ≥ ( 1 − 1 n 2 ) n ≥ 1 −