算法导论第五章习题答案(第三版) Introduction to Algorithm
2013-10-28 14:36
441 查看
Exercises
5.1-1应聘者是随机出现的,如果总是可以决定哪一个应聘者最佳,那么就意味着对任何一种应聘序列,总能知道哪一个最好的,这也就意味着我们能过比较任意的两个元素,必然也就知道了应聘者的全部次序。
5.1-2
Randome(0,1)只能产生0或者1,恰好二进制只有0或者1,故可以利用Random(0,1)产生Random(a,b)的每一位,计算b的位数,如果生成的数不在[a,b]范围内,就重新生成。
5.1-3
调用两次BASED-RANDOM,调用两次后,都产生1的概率是p2,都产生0的概率是(1-p)2,而产生一个0,一个1的概率是2p(1-p)
\[E[x] = \sum\limits_{i = 1}^n {2p(1 - p){{(1 - 2p(1 - p))}^{i - 1}}} = \frac{1}{{2p(1 - p)}}\](几何概率公式)
5.2-1
第一个就是最佳候选人的时候只需要雇佣一次,所以是1/n。只有按照最佳递增的次序出现的时候,才需要雇佣n次,而共有n!中序列,所以应是1/n!
5.2-2
第一次雇佣的一定是第一个应聘者,第一个应聘者为的rank值为i的概率是1/n,那么最优的应聘者应该是比第一个rank值大的应聘者中第一个出现,概率为1/(n-i)。所以正好雇佣两次的概率应该为:\[p = \sum\limits_{i = 1}^n {\frac{1}{n} \cdot \frac{1}{{n - i}}} = \frac{1}{n} \cdot \ln (n - 1)\]
5.2-3
\[E[X] = E[\sum\limits_{i = 1}^n {{x_i}]} = \sum\limits_{i = 1}^n {E[{x_i}]} = \sum\limits_{i = 1}^n {(\frac{1}{6} \cdot (1 + 2 + 3 + 4 + 5 + 6))} = \frac{{7n}}{2}\]
5.2-4
帽子核对问题
Xi=1的情况下,表示这个人拿到帽子,每个人拿到帽子的可能性斗士1/n,而E[X]=1/n,共有n个人,所以拿到自己顾客帽子的期望数是1。
5.2-5
定义指示器随机变量Xij,若其为1,则表示(i,j)为A的逆序对,因为A的构成是均匀分布,那么E[Xij]=1/2。所以数学期望为:
\[E[X] = \sum\limits_{i = 1}^{n - 1} {\sum\limits_{j = i + 1}^n {{X_{ij}}} } = \sum\limits_{i = 1}^{n - 1} {\sum\limits_{j = i + 1}^n {\frac{1}{2} = \frac{{n(n - 1)}}{4}} } \]
5.3-1
将循环不变式里的第一次循环拿出来即可,循环不变式变为:
在for循环的第i次迭代之前,对于i=2...n,对每个可能的(i-1)排列,字数组A[1...i-1]包含这个这n个元素中的k个元素的序列,并且不重复。一共有n!/(n-k)!中可能的k排列。
初始化条件改为:对每个可能的1排列,字数组A[1..1]包含这个1排列的概率是1/n。
5.3-2
不能实现。
Kelp教授的算法也不能产生一些其他的排列,例如:当n=3的时候,可以产生与原先不同排列的5中排列,而第一遍循环的时候第一个元素可以与第二或第三交换,第二次循环,第二个元素只可以与第三个元素交换。总共只有2种排列。
5.3-3
不能产生均匀排列,因为产生每个排列的概率是不同的,当n=3时,会有27中排列,但是实际上只会有6中排列,因为每个排列概率不同,所以不会产生均匀随机排列。
5.3-4
B[(i+offset) mod n]=A[i],这是一个循环,显然可以每个元素A[i]出现在B中任何特定位置的概率是1/n。但是却不是均匀随机排列,因为你并不能保证每个位置都被赋值了,会有重复。
5.3-5
\[P = \frac{{{\rm A}_{{n^3}}^n}}{{{{({n^3})}^n}}} = \frac{{{n^3}!}}{{({n^3} - n)!{{({n^3})}^n}}}\]
5.3-6
增加判断过程,如果生成的优先级与前面有重复,就重新生成一个优先级rank。
5.3-7
RANDOM-SAMPLE(m,n)
if m= =0
return Ø
else S = RANDOM-SAMPLE( m-1 , n-1 )
i=RANDOM( 1 , n )
if i∈ S
S=S ∪ { n }
else S=S ∪ { i }
return S
Thinking Problems
5-1a.令Xi表示第i次操作后计数器的增量
\[P\{ {X_i} = 0\} = 1 - \frac{1}{{{n_{i + 1}} - {n_i}}}\]
\[P\{ {X_i} = {n_{i + 1}} - {n_i}\} = \frac{1}{{{n_{i + 1}} - {n_i}}}\]
E[Xi]=1
执行n次后,计数器所表示的期望值是:\(\sum\limits_{i = 1}^n 1 = n\)
b.
\[D[X] = E[{X^2}] - E{[X]^2}\]
所以\(D[{X_i}] = {n_{i + 1}} - {n_i} - 1\),所以当ni=100i时,计数器所表示的数的方差是99n。
5-2
a.定义一个标志数组,若某元素已经被查看过,则被标记为1,否则为0,另定义count变量,记录标记数组中1的个数,当数目等于n的时候,终止。
b.定义X需要查找的次数,则\(E[A] = \sum\limits_{i = 1}^\infty {i \cdot \frac{1}{i}} \cdot \frac{1}{n} \cdot {(1 - \frac{1}{n})^{i - 1}} = n\)(根据几何分布概率公式)。
c.因为有k≥1个下标使得A[i]=x,那么查找到相应元素的概率是k/n,所以显然必须挑选A的下标数目是n/k。
d.设Xi表示第i次检查是个新元素
\[E[{X_i}] = \sum\limits_{j = 1}^\infty {j \cdot } {(\frac{{i - 1}}{n})^{j - 1}}(\frac{{n - i + 1}}{n})\]
X=X1+X2+X3+...+Xn-1+Xn=∑E[Xi]
e.平均情况:\(E = \sum\limits_{i = 1}^n {i \cdot \frac{1}{n}} = \frac{{n + 1}}{2}\)
最坏情况为:n。
f.平均情况:\(E = \sum\limits_{i = 1}^{n - k} {i \cdot \frac{k}{n}{{(\frac{{n - k}}{n})}^{i - 1}}} \)
最坏情况:n-k。
g.运行时间都是n。
h.k=0时,最坏和期望都是n。
k=1时,最坏是n,期望是(n+1)/2。
k>1时,最坏是n-k,期望是O(n/k)。
i.第二种方法较好,时间复杂度最小,与第三种时间复杂度一样,还不用随机化数组。
(若有错误和不足,欢迎大家积极指正!)
相关文章推荐
- 算法导论第七章习题答案(第三版) Introduction to Algorithm
- 算法导论第八章习题答案(第三版) Introduction to Algorithm
- 算法导论第四章习题答案(第三版) Introduction to Algorithm
- 算法导论第九章习题答案(第三版) Introduction to Algorithm
- 算法导论第三章习题答案(第三版) Introduction to Algorithm
- 算法导论第六章习题答案(第三版) Introduction to Algorithm
- 算法导论题解(我的答案,欢迎指正) introduction to algorithms
- 《java how to program》第三版1-6章大部分习题答案[原创]
- 算法导论第二章习题答案(第三版) Introduction to Algorithm
- 算法导论第三版第二章第三节习题答案
- 算法导论第三版第二章第一节习题答案
- 算法导论第三版第二章第二节习题答案
- 谭浩强 《C程序设计》 第三版 第五章习题答案 (修正)
- Introduction to Algorithm(chapter 11)
- greatest common divisor introduction to algorithm 3rd, example 31.2
- 算法导论第三版习题4.4
- 算法导论第三版习题4.5
- Solutions_to_Introduction_to_Algorithm_3nd_Exercise_3
- SQLZOO习题答案 The nobel table can be used to practice more SUM and COUNT functions./zh
- [Introduction to algorithm]solution to Exercises 6.5-8