算法导论第三版 习题5.2-1和5.2-2 HIRE-ASSISTANT问题

来源:互联网 发布:insert mysql自增 编辑:程序博客网 时间:2024/06/06 18:23

HIRE-ASSISTANT简述:你需要雇佣一个办公助理,然后每次面试一个应聘者。如果该应聘者比之前的办公助理更优秀,就雇佣该应聘者为新的办公助理,同时辞去上一个办公助理。第一个应聘者总会被雇佣。

假设总共要面试n个应聘者,并且给应聘者以能力进行排序,每个应聘者都有一一对应的能力值rank。n个应聘者的名次rank数组为[1..n]。

 

5.2-1 在HIRE-ASSISTANT中,假设应聘者以随机的顺序出现,你正好雇佣一次的概率是多少?正好雇佣n次的概率是多少?

 

首先,正好雇佣一次,则必然是最佳助理rank=n出现在第一次面试,所以P=1/n。因为应聘者随机顺序出现,最佳助理等可能的出现在每一次面试,所以最佳助理第一次面试的概率P=1/n。

 

用指示器随机变量分析:

假设Xi表示第i个应聘者被雇佣的事件,则

Xi=I{应聘者i被雇佣}=

应聘者i被雇佣,是正好应聘者i比从1到i-1的每个应聘者优秀,即应聘者i的rank值最大。又应聘者是随机出现的,所以前i个应聘者任意一个都是等可能最优秀的,所以应聘者i最优秀的概率是1/i。因此,E[Xi]=Pr{应聘者i被雇佣}=1/i。同时,可以得到Pr(Xi=0,应聘者i不被雇佣的概率)=1- Pr{应聘者i被雇佣}=(i-1)/i。

雇佣n次,也就是每次都发生雇佣,所以事件雇佣n次的概率:P=X1*X2*..Xn=(1/1)*(1/2)*..(1/n)=1/n!。

 

用概率分析雇佣n次,那么雇佣n次必须满足所有的应聘者以单调递增的方式出现,即面试顺序必须为1,2,..n。因为应聘者随机顺序出现,所以在第i次面试中,每个应聘者都等可能的出现。在第i次面试时,前面i-1个面试者顺序已经确定,那么总共剩下了n-i个应聘者,此时概率那么rank=i的应聘者被面试的概率P=1/n-i。所以,P{n次雇佣}=1/n * 1/(n-1) *..1/1=1/n!。

 

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

 

解题思路:

首先我们可以直接观察三个结论:

(1) 1号助理总是会被雇用;

(2) 最佳助理(即rank为n的助理)总是会被雇用;

(3) 最佳助理不可能是1号助理,因为那样将只能刚好雇用一次。

 

满足以上三点,就可以满足两次雇佣。所以在使HIRE-ASSISTANT刚好雇用两次的序列中,一号助理必然有rank=i 且 i<=n-1,同时,所有rank在[i+1..n-1]区间内的助理必然在rank为n的最佳助理被面试之后面试。

 

1.设事件Ei表示应聘者i恰好作为1号助理被雇用的情况,则对于任意给定的i,有Pr{Ei}=1/n。

因为在第一次面试中,每个应聘者都等可能被选中,所以特定的i被第一次面试的概率为1/n。

2.设j指向最佳助理在面试序列中的位置,则若要满足两次雇佣,此时必须满足2、3、...、j-1号面试的应聘者的名次都要小于i。

设事件F表示2、3、...、j-1号助理的rank比1号助理低的情况。那么发生两次雇佣只有在Ei和F都满足的情况下发生,即F∩Ei,此时rank=i的助理作为第一个面试者被雇佣,第二次雇佣发生在最佳雇佣rank=n上,且仅有两次雇佣。

而F成立,当且仅当名次为i+1、i+2、...、n-1的应聘者在最佳助理n后面进行面试,否则[i+1 .. n-1]将会出现在[1..j]次面试中,从而发生雇佣。

 

假设Ei成立,F成立等价于当最佳助理在rank为i+1、i+2、...、n-1的n-i-1个助理在最佳助理n之后被面试。所以,Pr{F|Ei}=1/(n-i)。因为[i+1..n]共(n-i)个助理有(n-1)!种排列可能性,而n要排在最前面共有(n-i-1)!种排列,所以,Pr{F|Ei}=(n-i-1)!/(n-i)!=1/(n-i)。 另一种看法可以是,要是rank=n的助理出现在第一位,剩下的排序任意即可,而[i+1 .. n]总共有n-i个助理,每个助理等可能的出现在最前面,所以,Pr{F|Ei}=1/(n-i)。

 

设事件A表示HIRE-ASSISTANT刚好雇用两次的情况。因为最佳助理n不可能被第一个面试,于是我们有:

A=F∩(E1∪E2∪...∪En-1)

 =(F∩E1)∪(F∩E2)∪...∪(F∩En-1)

Pr{A}=∑Pr{F∩Ei} (i<-1to n-1)

Pr{F∩Ei}=Pr{F|Ei}Pr{Ei}

        =1/(n-i)*(1/n)

所以

Pr{A}=∑1/(n-i)*(1/n)(i<-1 to n-1)

    =1/n*∑1/(n-i) (i<-1 to n-1)

    =1/n*(1/(n-1)+1/(n-2)+...+1/1)


原创粉丝点击