代码改变世界

算法导论-概率分析和随机算法习题解

2012-05-04 11:54  meteorgan  阅读(2361)  评论(1编辑  收藏  举报

5.1-3 假设你希望以各1/2的概率输出0和1。你可以自由使用一个输出0或1的过程BIASED-RANDOM。它以概率p输出1,以概率1-p输出0,其中0 < p < 1,但是你并不知道p的值。给出一个利用BIASED-RANDOM作为子程序的算法,返回一个无偏向的结果,即以概率1/2返回0,以概率1/2返回1。作为p的函数,你的算法的期望运行时间是多少?

  解:代码:

1 while true:
2     x = BIASED-RANDOM()
3     y = BIASED-RANDOM()
4     if x != y:
5          return

x != y 存在两种情况,x= 1, y = 0; x = 0, y = 1。这两种情况的概率相等,均为p(1-p),所以输出1和0的概率都是1/2。算法一次运行成功的概率为2p(1-p),且服从几何分布,期望是1/[2p(1-p)]。

 

5.2-2 在HIRE-ASSISTANT中,假设应聘者以随机的顺序出现,正好雇用两次的概率是多少?

  解: 两个事实:1. 第一位总是雇用; 2. 最好的总是雇用。 若要雇用两次,则第一位不能是最好的应聘者,且最好的应聘者应出现在比第一位应聘者要好的所有应聘者之前。即若第一位应聘者排名为i(i < n),则最好的应聘者n 应排在i+1, i+2, ... i+n-1之前。第一位应聘者的排名为i的概率为1/n,n排在i+1, i+2, ... i+n-1之前的概率是1/(n-i)。i 的取值为1 -> n-1,所以正好雇用两次的概率是Σn-1i=1 1/[i(n-i)] = 1/n * Hn-1。

 

5.3-5 证明程序PERMUTE-BY-SORTING的数组P中,所有元素都唯一的概率至少为1 - 1/n。

  解: 元素P[i] 唯一的概率为 [n3-(i-1)]/n3 。所以所有元素都唯一的概率为:

                          

 

5.4-6 假设将n个球投入n个盒子里,每次投球都是独立的,并且每个球落入任何盒子的机会都相等。空盒子的期望数量是多少?正好有一个球的盒子的期望数量又是多少?

  解: 设空盒子的数量为X,正好有一个球的盒子的数量为Y。则有:

                               

                             

 

5-1 概率计数

  解: a) 对j = 1, 2, 3, ……n,设X表示第j次INCREMENT的增量,V表示n次INCREMENT后计数器表示的值,则有Vn = X1 + X2 + ……Xn。所以有:

                               

               设C表示第j次INCREMENT开始时计数器的值,则有:

                               

                Cj = i 时,X有两种取值: 0, 概率为1 - 1/(ni+1 - ni);ni+1 - ni, 概率为1/(ni+1-ni),所以:

                               

    又:

                             

    所以Xj的期望为1Vn的期望为n。

 

  b) ni+1 - n= 100,X相互独立,所以有:

                     

            又:

                               

    所以方差为99n。