算法导论学习笔记(四) 初稿
来源:互联网 发布:制造业大数据 编辑:程序博客网 时间:2024/04/30 03:54
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
- 算法导论学习笔记(四) 初稿
- 算法导论学习笔记(二) 初稿
- 算法导论学习笔记(三) 初稿
- 算法导论笔记(四)
- 算法导论笔记(四)
- 算法导论学习笔记之四--堆排序
- 分治之最大子数组-《算法导论》学习笔记四
- 《算法导论》学习笔记
- 《算法导论》学习笔记
- 算法导论学习笔记
- 《算法导论》学习笔记
- 算法导论学习笔记(四):求X的N次方的二分实现
- 算法导论学习笔记(四)图论之最小生成树
- 算法导论学习笔记(一)
- 算法导论学习笔记(九):红黑树
- 动态规划(算法导论学习笔记)
- 算法导论学习笔记(1)
- 算法导论学习笔记(时时更新)
- Android RecyclerView 使用完全解析 体验艺术般的控件
- 内存泄漏检测工具VLD在VS2010中的使用举例
- 初识Java——HelloWorld
- java中i++ 与 i=i++的区别
- 降低Java垃圾回收开销的5条建议
- 算法导论学习笔记(四) 初稿
- windows系统注册dll文件
- iOS常用加密
- 66.[PCL]PCD文件格式
- java生成二维码
- EmitMapper 和TinyMapper 两者简单对比(若转载请注明)
- KnockOutJS入门
- cut命令小结
- hdu5860 Death Sequence