算法导论_第五章_概率分析和随机算法
本章大概介绍了概率论的知识,都是些理论知识和其部分运用。
先来介绍一下雇佣问题:
假设你要雇佣一个新的办公室助理,雇佣代理每天想你推荐一个应聘者(连续推荐n个),你面试这个人,如果这个应聘者比目前的办公室助理更优秀,你就会辞掉当前的办公室助理,然后聘用这个新的。面试一个人需付给雇佣代理一笔费用,聘用办公助理也需要费用。
假设面试费用为Ci,雇佣的费用为Ch,假设整个过程中雇佣了m次,于是总的费用是 nCi+mCh。由于n是固定值,总费用的变化取决于m值。
这个场景用来当做一般计算范式的模型,通常情况下我们需要检查队列中的每个成员,并且维护一个目前的获胜者,来找出序列中的最大或最小值。雇佣问题是对哪一个成员当前获胜的更新频繁程度建立模型。
最坏情况
最坏情况下,我们雇佣了每一个应聘者,m=n。
概率分析:
概率分析是在问题分析中应用概率的理念,大多数情况下,我们采用概率分析来分析一个算法的运行时间,有时也来分析其他的量。
假设应聘者以随机顺序出现,等价于这个排名列表是数字1到n的n!种排列中的任意一个。或者,我们也称这些排名构成一个随机排列,也就是说,在n!种排列中,每一种以等概率出现。
随机算法:
为了模拟随机输入,我们利用一个随机数生成器
更一般的,如果算法的行为不仅由输入界决定,而且也由随机数生成器产生的数值决定,则称这个算法是随机的
当分析一个随机算法的运行时间时,我们以运行时间的期望值衡量,其中输入的值由随机生成器生成。
我们将一个随机算法的运行时间称为期望运行时间,以此来区分这类算法和那些输入是随机的算法。一般而言,当概率分布是在算法的输入上时,我们讨论的是平均情况运行时间,当算法本身做出随机选择时,我们讨论其期望时间。
指示器随机变量
给定一个样本空间S和一个事件A,那么事件A对应的指示器变量I{A}定义为:
I{A}=1 如果A发生
I{A}=0 如果A不发生
一个事件A对应的指示器变量的期望值等于事件A发生的概率。
根据反映期望线性性质的等式,容易计算出总和的期望值:它等于n个随机变量的期望
值。期望的线性性质利用指示器随机变量作为一种强大
的分析技术。当随机变量之间存在关系时也成立。
随机算法:
随机算法的特点就是不依赖于其输入的值,即使其输入的为一个固定值,随机算法也会
产生相应的不同分布。
随机排列数组:
思路:可以先生成一组大小不相同的数作为其对应数组元素的优先级,然后根据优先级
进行排列。
还有另一种方法:
RANDOMIZE_IN_PLACE(int A[],int n)
{
for(inti=1;i<=n;i++)
{
swap(A[i],A[RANDOM(i,n)]);
}
}
这种方法也能随机生成一个概率相同的排列
几个应用:
1.生日悖论
设X(i,j)表示i和j生日相同
X=k*(k-1)/(2*n)
所以要X>=1在n=365时,只需k=28
2.球与箱子
同样,先计算出单个情况下的概率,然后再把所有情况的概率加起来,作为事情发生的
总概率
由于一下涉及概率论等数学知识,由于能力有限,不再详细介绍。