5.1 雇用问题
- 平均运行时间:所有可能输入分布取平均值的运行时间
- 期望时间:随机算法的运行时间
- 当概率分布是在算法的输入上时,讨论平均运行时间,当算法本身做出随机选择时,讨论期望运行时间
5.2 指示器随机变量
个人感觉与独立重复试验类似
核心:将问题分解为子问题
应聘者问题的指示器随机变量解法
E[X]=∑x=1nxP{X=x}=∑i=1nE[xi]=∑i=1n1/i=lnn+O(1)关于例题
帽子核对问题
对于每个顾客,拿到自己的帽子的概率为1/n,故其数学期望为∑ni=11/n=1逆序对问题
对于每一组数的组合,都有一半的概率为逆序,故其数学期望为C2n⋅12=n(n−1)/4
5.3 随机算法
含义
让分布固定,而通过特定算法实现随机化。随机排列数组
PERMUTE-BY-SROTING
- 即为每一个数组元素随机分配一个rank值,并以rank重新排列这些元素。
- 通过条件概率可证明每种分配的可能均为1/n!
- 通过5.3-4可知,对于每个元素A[i],排在任一位置的概率均为1/n,并非是证明均匀随机排列的充分条件
RANDOMIZE-IN-PLACE
- 即对于每个元素,都与它后面(包含自身)的元素相交换。
证明
初始化:初始化赋值i=2(涉及讨论i=1的空数组,故先显式交换一次),即对于每个1排列,长度为1的子数组包含这种排列的概率为 (n−1)!/n!=1/n,第一次循环迭代前循环不变式成立。
保持:假设i次迭代前每种(i-1)排列出现概率为(n−i+1)!/n!,则第i次迭代后,概率为1n−i+1⋅(n−i+1)!n!
终止:终止时,i=n+1,子数组任一排列概率为1/n!
5.4 特征序列
问题:抛一枚标准硬币n次,求最长连续正面的数学期望
思路: 类似夹逼准则
证明过程:
O(lgn)
设连续掷硬币k次,k=2lgn。
起始于某一位置,长度**大于等于**k的序列至多有n-k+1个,故开始于任一位置的概率总和小于等于
∑i=1n−k+11/2k≤∑i=1n−k+11/n2<∑i=1n1/n2=1/n由定义知
E[L]=∑j=0njP{Lj}=∑j=0k−1jP{Lj}+∑j=knjP{Lj}
其中j为长度的具体值。显然,当j较大时P{Lj}较小,当P{Lj}较大时j较小,故
E[L]<∑j=0k−1kP{Lj}+∑j=knnP{Lj}<k∑j=0k−1P{Lj}+1
又因为∑k−1j=0P{Lj}<1,原式小于O(k)=O(lgn)
Ω(lgn)
把n次投掷划分为n/s组,每组掷s次,s取lgn/2。
显然任一一组,结果为同一面(假设为正面)概率为
1/2s=1/n√故每组都不是同一面概率为
(1−1/n√)n/s−1≤e(n/s−1)/n√=O(e−lgn=O(1/n))对j值较小的部分,其值忽略不计,因此
∑j=0njP{Lj}≥∑j=snjP{Lj}≥s∑j=snP{Lj}≥s(1−O(n))=Ω(lgn)
结论:特征序列长为lgn。
指示器随机变量的近似结果:n−k+12k,且带入k=lgn时值近似符合要求。
5.5 在线雇佣问题
问题:只雇佣一次应聘者,并且每次应聘必须决定是否雇佣这个人。
实现思路:选择一个正整数k,面试并拒绝前k个应聘者,并雇佣后面第一个分数比前k个应聘者中分最高者还高的人,若没有则雇佣最后一个人。问题转化为寻找k的最优值。
过程:
令P{Si}表示应聘者为第i时面试成功的概率,Bi表示最佳面试者为第i人的概率,M(j)表示前1~j人中的最高分,Oi表示从k+1到i-1的应聘者都小于M(k)的概率。
显然
P{S}=∑i=k+1nP{Si}
P{Bi}=1/n
P{Oi}=k/(i−1)
P{Si}=P{Bi}⋅P{Oi}解得 P{S}=kn(lnn−lnk)
求导,得k=n/e