您的位置:首页 > 编程语言 > Go语言

算法导论第五章习题答案(第三版) 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-1

a.令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.第二种方法较好,时间复杂度最小,与第三种时间复杂度一样,还不用随机化数组。

(若有错误和不足,欢迎大家积极指正!)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: