您的位置:首页 > 其它

算法导论之概率分析和随机算法文档

2016-05-20 16:19 204 查看
     概率分析和随机算法文档
  本章由雇用问题引出随机算法。一家公司要雇用一个新的办公经理,于是要找一个雇用代理来推荐面试者,由我面试他,然后决定是否雇用。花费主要有:要付一小部分钱给这个雇用代理,让其继续寻找新的办公经理‚若是产生了新的办公经理,就要辞退原有的经理,此时要付一大笔钱给雇用代理。

  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

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息