算法导论:概率分析和随机算法

参考资料:
概率分析和随机算法
雇佣问题
在讲述概率分析和随机算法之前,需要先简单介绍一下,概率论的基础知识

基础知识

伯努利试验:在相同条件下,重复地进行n次相互独立的实验 。
有两种可能的结果,成功概率:p、失败概率:q=1-p。
例如:进行n次抛硬币的实验。
几何分布:在n次伯努利试验中,试验k次才得到第一次成功的机率。(是离散型概率分布)
例如:进行n次抛硬币,试验k次才得到第一次正面的概率。
几何分布的概率与期望分别是:

几何分布的概率与期望

二项分布:重复n次独立的伯努利试验。在每次试验中只有两种可能的结果,而且两种结果发生与否互相对立,并且相互独立,与其它各次试验结果无关,事件发生与否的概率在每一次独立试验中都保持不变,则这一系列试验总称为n重伯努利实验。
例如:进行完n次抛硬币之后,正面出现的次数
二项分布的概率与期望:
二项分布的概率与期望

0-1分布:就是试验次数为1的二项分布
0-1分布的期望:
0-1分布的期望

当然还有一个很重要的调和级数:
调和级数

概率分析

我们先从一个简单的问题开始,来介绍概率分析:
首先介绍雇佣问题:假设你要雇佣一个新的办公室助理,雇佣代理每天想你推荐一个应聘者(连续推荐n个),你面试这个人,如果这个应聘者比目前的办公室助理更优秀,你就会辞掉当前的办公室助理,然后聘用这个新的。面试一个人需付给雇佣代理一笔费用,聘用办公助理也需要费用。
也就是只要面试了(不管最后有没有聘用),就要花费a,如果聘用了,就要再花费b。

雇佣问题

例如,现在有一个人,参加了面试并且最后被聘用了,就要花费a+b的费用。
雇佣问题

所以总的花费就是an+bm,其中n是面试的总人数,m是雇佣的次数,我们最后只雇佣最优秀的人,所以只要比前一个雇佣的人优秀,那么就开除前一个人,雇佣当前的人。
雇佣花费

所以会有两种情况出现:
最好情况:面试n次但只雇佣一次(即第一个人就是最优秀的人)
那么雇佣费用为:an+b1
最坏情况:面试n次,应聘者质量按出现的次序严格递增. 面试n次,雇佣n次
那么雇佣费用为:an+bn
但是应聘者并非总以质量递增递减次序出现,因此,平均情况下,会雇用多少次?为了解决这个问题,我们就需要进行概率分析了。为了进行概率分析就必须假设输入分布。
在雇用问题中
假设应聘者以随机顺序出现.即第i应聘者都等可能的被雇用。假设任意两个应聘者间可以比较,可以确定哪一个更有资格。此时,计算平均情况下的雇用费用,即计算雇用一个新的办公助理的期望。
用X表示雇用新办公助理的次数,则:
期望

其中Pr{X = x}表示在整个过程中,雇佣了x次的概率,这个计算起来会很麻烦。
所以我们可以换一种思路,将其分解成多个0-1分布来分析:
0-1分布

我们将Xi看做0-1分布,即i被雇佣则为1,不被雇佣则为0。根据前面所说0-1分布的期望,就是1的概率,在这里也就是应聘者i被雇佣的概率。i被雇佣说明他是前i个人里面最优秀的那一个,那第i个人是前i个人里最优秀的概率是多少呢?显然是1/i,也就是应聘者i被雇佣的概率是1/i。那么我们可以得出Xi的期望E[Xi]=1/i。
那么X也就是所有应聘者组成的分布的期望E(X),根据调和级数,可以计算出结果,如上图所示。
所以可以得出在平均情况下的费用:
平均情况费用

从上面雇佣问题中,我想我们已经了解到了概率分析

概率分析定义:用概率论方法对不确定性问题进行定量研究,为决策提供定量的依据。 

例如:


概率分析

这个算法是随着输入的变化而变化的,对于某个特定的输入,它总是会产生固定的雇佣次数 — 确定型算法

随机算法

概率分析是在,输入已经确定的基础上进行的分析,但是在大多数情况下,输入的分布信息无法得知,只能采用随机算法。

随机算法

如图所示,将输入的序列随机打乱,可以消除或者减少最坏情况的发生。
在这里重要的就是RANDOM过程,共有两种打乱方法,分别是随机排列数组和原址排列数组。
随机排列数组
随机排列数组

会给原数组中的每一个元素,生成一个优先级数据,当然生成的数字大小范围是1到结点个数的3次方。
最后根据优先级排序,得到结果。
原址排列数组
原址排列数组

这种方法就是将第一个数与后面随机选择的数进行交换。
原址排列数组

例如将第一个数0和后面的数字8进行交换
原址排列数组

这里将数字2和数字5进行交换。就是这样进行,这种方法比上一种要好。
概率分析和随机算法的区别
概率分析和随机算法

概率分析:对于某个特定的输入,它总是会产生固定的结果。
随机算法:随机算法的随机发生在算法上,而不是发生在输入分布上 .对输入进行随机再排列。
最后的小结:
小结

你可能感兴趣的:(算法导论:概率分析和随机算法)