算法导论5 Problems 答案
5-1
a
假设第\(i\)执行INCREMENT
操作提升的计数为\(X_i\)。那么最终\(n\)次操作完成后,提升的计数为\(X=X_1+X_2+\dots+X_n\)。
对于任何一个计数器值\(j\),有\(\dfrac{1}{n_{j+1}-n_j}\)的概率提升\(n_{j+1}-n_j\),有\(1-\dfrac{1}{n_{j+1}-n_j}\)的概率没有任何提升,因此有
\(\begin{aligned} E[X_i]&=0\cdot\Pr\{\text{unchange}\}+(n_{j+1}-n_j)\cdot\Pr\{\text{increase}\}\\ &=0\cdot\left(1-\dfrac{1}{n_{j+1}-n_j}\right) + (n_{j+1}-n_j)\cdot \dfrac{1}{n_{j+1}-n_j}\\ &=1 \end{aligned}\)
最终消去了\(j\)值。
因此\(\displaystyle{E[X]=E\left[\sum_{i=1}^nX_i\right] = \sum_{i=1}^nE[X_i]= n\cdot 1=n}\)。
b
\(\begin{aligned} E[X_i^2]&=0\cdot\Pr\{\text{unchange}\}+(n_{j+1}-n_j)^2\cdot\Pr\{\text{increase}\}\\ &=0\cdot\left(1-\dfrac{1}{n_{j+1}-n_j}\right) + (n_{j+1}-n_j)^2\cdot \dfrac{1}{n_{j+1}-n_j}\\ &=n_{j+1}-n_j\\ &=100(j+1)-100j\\ &=100\\ \\ \text{Var}[X_i]&=E[X^2_i]-E^2[X_i]\\ &=100-1\\ &=99 \end{aligned}\)
由于\(X_1,X_2,\dots,X_n\)是相互独立的,因此\(\displaystyle{\text{Var}[X]=\text{Var}\left[\sum_{i=1}^nX_i\right] = \sum_{i=1}^n\text{Var}[X_i]= n\cdot 99=99n}\)。
5-2
a
1 | RANDOM-SEARCH(A, n, x) |
b
可以发现,每一次while
循环的执行过程相当于在参数为\(\dfrac{1}{n}\)的指数分布中进行抽样,因此需要抽样\(A\)的下标的期望次数为\(n\)。
c
可以发现,每一次while
循环的执行过程相当于在参数为\(\dfrac{k}{n}\)的指数分布中进行抽样,因此需要抽样\(A\)的下标的期望次数为\(\dfrac{n}{k}\)。
d
假设随机变量\(X_i\)表示仍然剩下\(i\)个坐标仍然未被访问时,随机访问到这\(i\)个坐标的期望值。那么在整个RANDOM-SEARCH
的调用过程中,访问下标的总次数为\(X=X_1+X_2+\dots+X_n\)。
可以发现,\(X_i\)服从参数为\(\dfrac{i}{n}\)的指数分布,因此\(E[X_i]=\dfrac{n}{i}\)。因此有\(\displaystyle{E[X]=E\left[\sum_{i=1}^nX_i\right]=\sum_{i=1}^nE[X_i]=\sum_{i=1}^n\dfrac{n}{i}=n\sum_{i=1}^n\dfrac{1}{i}=n(\ln n+O(1))}\)。
e
由于出现的排列都是等可能的,因此\(x\)在每个位置出现的概率都相同,因此平均查找时间为\(\displaystyle{\sum_{i=1}^n i\cdot \dfrac{1}{n}}=\dfrac{n+1}{2}\)。最坏查找时间明显为\(n\)。
f
最坏查找时间为\(n-k+1\)。
假设示性变量\(X_i\)表示下标元素\(A[i]\)中被访问过,那么总共访问的下标数为\(X=X_1+X_2+\dots+X_n\)。
对于\(A[i]\neq x\)的\(i\),\(A[i]\)一定要放在\(k\)个\(x\)元素前面才能访问到,如果放在任何一个的后面,那么就会因为提前返回而无法访问,此时\(E[X_i]=\dfrac{1}{k+1}\)。
对于\(A[i']=x\)的\(i'\),\(A[i']\)一定要放在这\(k\)个\(x\)中的第一个才能被访问到,如果放在任何一个的后面,那么就会因为提前返回而无法访问,此时\(E[X_{i'}]=\dfrac{1}{k}\)。
因此\(\displaystyle{E[X]=E\left[\sum_{i=1}^nX_i\right] = \sum_{i=1}^nE[X_i]= k\cdot \dfrac{1}{k} + (n-k)\cdot \dfrac{1}{k+1}=\dfrac{n+1}{k+1}}\)。
g
无论是平均还是最坏查找时间,都为\(n\)。
h
和算法DETERMINISTIC-SEARCH
一样,如果\(k=0\),那么无论平均还是最坏查找时间,都为\(n\);如果\(k\ge
1\),那么最坏查找时间为\(n-k+1\),平均查找时间为\(\dfrac{n+1}{k+1}\)。
i
使用算法DETERMINISTIC-SEARCH
最好。
对于算法
DETERMINISTIC-SEARCH
。在平均情况下,DETERMINISTIC-SEARCH
的平均时间是算法RANDOM-SEARCH
的一半。如果\(A\)不存在目标元素\(x\),算法DETERMINISTIC-SEARCH
能够更快地结束。对于算法
of SCRAMBLE-SEARCH
。与其先对数组\(A\)进行乱序,还不如直接像DETERMINISTIC-SEARCH
那样直接查找。由于平均查找时间和最坏查找时间都一样,这个算法先对\(A\)乱序显得多余。