《算法导论》第三版第5章 概率分析和随机算法 练习&思考题 个人答案
注:本章内容需要一定的《概率论与随机过程》课程基础。
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
解:1n\frac{1}{n}n1;1n!\frac{1}{n!}n!1
5.2-2
提示:过程中的求和可用积分计算。
解:1n(ln(n−1)+O(1))\frac{1}{n}(\ln(n-1)+O(1))n1(ln(n−1)+O(1))
5.2-3
解:3.5n3.5n3.5n
5.2-4
解:1
5.2-5
解:12An2\frac{1}{2}A_n^221An2
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!种可能,而本题会产生nnn^nnn种可能,在n比较小时也可以通过实验验证,一个很好的参考。
5.3-4
思路:其实很容易看出这是一个随机偏移量的循环右移,因此易证概率为1/n。
5.3-5
证明:
Pr{1∩2∩3∩…}=Pr{1}⋅Pr{2∣1}⋅Pr{3∣1∩2}⋯=1(1−1n3)(1−2n3)(1−3n3)⋯≥1(1−nn3)(1−nn3)(1−nn3)⋯≥(1−1n2)n≥1−1n\begin{aligned}
\Pr\{1 \cap 2 \cap 3 \cap \ldots\}
&= \Pr\{1\} \cdot \Pr\{2 | 1\} \cdot \Pr\{3 | 1 \cap 2\} \cdots \\
&= 1 \bigg(1 - \frac{1}{n^3}\bigg)
\bigg(1 - \frac{2}{n^3}\bigg)
\bigg(1 - \frac{3}{n^3}\bigg)
\cdots \\
&\ge 1 \bigg(1 - \frac{n}{n^3}\bigg)
\bigg(1 - \frac{n}{n^3}\bigg)
\bigg(1 - \frac{n}{n^3}\bigg)
\cdots \\
&\ge \bigg(1 - \frac{1}{n^2}\bigg)^n \\
&\ge 1 - \frac{1}{n} \\
\end{aligned}Pr{1∩2∩3∩…}=Pr{1}⋅Pr{2∣1}⋅Pr{3∣1∩2}⋯=1(1−n31)(1−n32)(1−n33)⋯≥1(1−n3n)(1−n3n)(1−n3n)⋯≥(1−n21)n≥1−n1
5.3-6
思路:可以对优先级相同的元素再生成一次新的优先级。
5.3-7
思路:该过程返回一个含有m个元素的随机样本。即一个均匀随机组合,每个组合出现概率为1Cnm\frac{1}{C_n^m}Cnm1。
使用归纳法证明,初始条件易证。假设在m-1时,RANDOM-SAMPLE(m-1, n-1) 依然成立。那么在m时,分两种情况:新随机样本中是否包含元素n。
(1)如果包含n:mn(1Cn−1m−1)=1Cnm\frac{m}{n}(\frac{1}{C_{n-1}^{m-1}}) = \frac{1}{C_n^m}nm(Cn−1m−11)=Cnm1
(2)如果不包含n:n−mn(1Cn−1m)=1Cnm\frac{n-m}{n}(\frac{1}{C_{n-1}^{m}}) = \frac{1}{C_n^m}nn−m(Cn−1m1)=Cnm1
5.4 概率分析和指示器随机变量的进一步使用
5.4-1
解:1lg365−lg364≈263\frac{1}{\lg365-\lg364}\approx263lg365−lg3641≈263;115115115
5.4-2
解:k(k−1)<2bln2k(k-1)<2b\ln2k(k−1)<2bln2,最后结果k没算。
5.4-3
解:足够.
5.4-4
解:
k(k−1)(k−2)6n2≥1\frac{k(k-1)(k-2)}{6n^2}\geq16n2k(k−1)(k−2)≥1
k≥94k\geq94k≥94
5.4-5
解:Anknk\frac{A_n^k}{n^k}nkAnk;相当于k个人生日都不相同
5.4-6
解:ne\frac{n}{e}en;1e\frac{1}{e}e1
5.4-7
思路:把k=⌈lgn−2lglgn⌉k=⌈\lg n−2\lg\lg n⌉k=⌈lgn−2lglgn⌉代入。
思考题
5-1 (概率计数)
a.
E[Xj]=o(1−1ni+1−ni)+1⋅((ni+1−ni)⋅1ni+1−ni)=1E[X_j] = o(1 - \frac{1}{n_{i+1}-n_i}) + 1 · ((n_{i+1}-n_i) · \frac{1}{n_{i+1}-n_i})=1E[Xj]=o(1−ni+1−ni1)+1⋅((ni+1−ni)⋅ni+1−ni1)=1
nE[Xj]=nnE[X_j] = nnE[Xj]=n
b.
Var[Xj]=E[Xj2]−E2[Xj]=99Var[X_j] = E[X_j^2] - E^2[X_j] = 99Var[Xj]=E[Xj2]−E2[Xj]=99
nVar[Xj]=99nnVar[X_j] = 99nnVar[Xj]=99n
5-2 (查找一个无序数组)
a.
解:
RANDOM-SEARCH(A, n, x) let B(n)=0 be a new array index = RANDOM(1, n) while A[index] != x B[index] = 1 if B.sum = n return NIL index = RANDOM(1, n) return index
b.
解:nnn
c.
解:nk\frac{n}{k}kn
d.
解:n(lnn+O(1))n(\ln n + O(1))n(lnn+O(1))
e.
解:n+12\frac{n+1}{2}2n+1;nnn
f.
解:(n+1)/(k+1)(n+1)/(k+1)(n+1)/(k+1);n−k+1n-k+1n−k+1
g.
解:nnn;nnn
h.
解:与DETERMINISTIC-SEARCH相同。
i.
解:SCRAMBLE-SEARCH;因为可避免特殊输入情况带来的影响 ;DETERMINISTIC-SEARCH,因为SCRAMBLE-SEARCH虽然可以有更好的期望结果,但重新排列数组的操作时间内已经可以扫描一遍数组了。。
- 《算法导论》第三版第6章 堆排序 练习&思考题 个人答案
- 《算法导论》第三版第8章 线性时间排序 练习&思考题 个人答案
- 《算法导论》第三版第11章 散列表 练习&思考题 个人答案
- 《算法导论》第5章 概率分析和随机算法 个人笔记
- 《算法导论》第三版第7章 快速排序 练习&思考题 个人答案
- 《算法导论》第三版第31章 数论算法 练习&思考题 个人答案
- 《算法导论》第三版第9章 中位数和顺序统计量 练习&思考题 个人答案
- 算法导论 第5章 概率分析和随机算法
- 算法导论代码 第5章 概率分析和随机算法
- 算法导论第5章5.4概率分析和随机算法
- 算法导论第五章概率分析和随机算法最后思考题
- 算法导论第5章 概率分析和随机算法(5.1)
- 算法导论学习笔记-第5章 概率分析和随机算法
- 算法导论——lec 05 概率分析和随机算法
- 算法导论第五章:概率分析和随机算法
- 算法导论学习(一)——概率分析和随机算法【待续】
- 第5章:概率分析与随机算法
- 算法导论习题5--概率分析和随机算法
- 算法导论-概率分析和随机算法习题解
- 算法导论第三版第二章思考题答案