首页 > 学院 > 开发设计 > 正文

算法导论学习笔记(四) 初稿

2019-11-14 10:00:41
字体:
来源:转载
供稿:网友

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


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表