算法导论之概率分析和随机算法文档
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
本章由雇用问题引出随机算法。一家公司要雇用一个新的办公经理,于是要找一个雇用代理来推荐面试者,由我面试他,然后决定是否雇用。花费主要有:要付一小部分钱给这个雇用代理,让其继续寻找新的办公经理‚若是产生了新的办公经理,就要辞退原有的经理,此时要付一大笔钱给雇用代理。
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
相关文章推荐
- 书评:《算法之美( Algorithms to Live By )》
- 动易2006序列号破解算法公布
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- 超大数据量存储常用数据库分表分库算法总结
- C#数据结构与算法揭秘二
- C#冒泡法排序算法实例分析
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题
- C#实现的算24点游戏算法实例分析
- c语言实现的带通配符匹配算法
- 浅析STL中的常用算法
- 算法之排列算法与组合算法详解
- C++实现一维向量旋转算法
- Ruby实现的合并排序算法
- C#折半插入排序算法实现方法
- 基于C++实现的各种内部排序算法汇总
- C++线性时间的排序算法分析
- C++实现汉诺塔算法经典实例
- PHP实现克鲁斯卡尔算法实例解析