概率分析和随机算法文档
本章由雇用问题引出随机算法。一家公司要雇用一个新的办公经理,于是要找一个雇用代理来推荐面试者,由我面试他,然后决定是否雇用。花费主要有:要付一小部分钱给这个雇用代理,让其继续寻找新的办公经理‚若是产生了新的办公经理,就要辞退原有的经理,此时要付一大笔钱给雇用代理。
HIRE-ASSISTANT伪代码如下:
Best=0;
For i=0 to n
Interview candidate i
If candidate i is betterthan the candidate best
Best=i
Hire candidate i
下面进行费用分析:
假设面试的费用为w1(此费用比较低),雇用的费用为w2(此费用比较高)。设m是雇用的人数,则:总费用是O(w1*n+w2*m),其中,w1*n的费用是必须要出的,所以,当w2*m的值最小的时候,公司损失的就越少。
最坏出现是雇用了n次,就是每次面试一个新的办公经理,总是比上一个优秀。费用为O(w2*n),由于真正进行雇用的时候,无法判断哪个比较优秀,因此采用类似于产生随机数的方式,进行模拟,得到的此时算法HIRE-ASSISTANT的费用为O(w2*ln n)显然比最差情况要好的多。因此:当我们能使得情况足够的随机,就像产生随机数一样的安排办公经理的见面顺序,我们就最有可能得到O(w2*ln n)类似的费用,最为有利。
我们可以得到:只要将队列变得足够的随机,就可以实现费用的足够小,因此,只需要在原来的HIRE-ASSISTANT算法的开始第一句话的地方稍微改变即可。
得到:(即为随机算法,费用的期望是O(w2*ln n),已经实现了较大的优化)
新的HIRE-ASSISTANT伪代码如下:
Randomly permute the list of candidates //随机的进行排列
Best=0;
For i=0 to n
Interview candidate i
If candidate i is betterthan the candidate best
Best=i
Hire candidate i