第五章 概率分析和随机算法

5.1雇佣问题

面试一个人需要花费ci,雇佣一个人需要花费ch。当面试者比现有员工优秀时,就要雇佣他。因此伪代码为:
Hire-assistant(n)
1 best = 0
2 for i = 1 to n
3 interview candidate i
4 if candidate i is better than candidate best
5 best = i
6 hire candidate i
假设雇佣m个人,则总花费: cin+chm
最坏情况需要花费:cin+chn
由于总会面试n个人,因此只讨论,雇佣的情况

5.2 指示器随机变量

给定一个样本空间S和一个事件A,那么事件A对应的指示器随机变量I{A}定义为:
I{A} = { 1 如果A发生
0 如果A不发生
引理5.1 给定一个样本空间S和S中的一个事件A,设XA = I{A},那么E[XA] = Pr{A}.

分析雇佣问题:
C.20 离散随机变量X的期望值是E[X] = Σx·Pr{X=x}
A.7 在这里插入图片描述
应聘者i被雇佣的概率为1/i
E[Xi] = 1/i
E[X] = E[Σ~i=1 to nXi~]
= Σ~i=1 to nE[Xi~]
= Σ~i=1 to n~1/i
=ln n+O(1)

引理5.2 假设应聘者以随机次数出现,算法总的雇佣费用平均情形下为O(ch*lnn)

5.3 随机算法

  要使随机发生在算法上,而不是在输入的分布上。给定一个输入,随机选择执行的顺序。
  伪代码为:

Hire-assistant-random(n)
1 randomly permute the list of candidates
2 best = 0
3 for i = 1 to n
4 interview candidate i
5 if candidate i is better than candidate best
6 best = i
7 hire candidate i

引理5.3 过程Hire-assistant-random的雇佣费用的期望是O(ch*ln n)

随机排列数组
给定一个数组A,包含元素1到n。目标是狗仔这个数组的一个随机排列。

1.为数组的每个元素A[i]赋一个随机的优先级P[i],然后根据优先级对数组A中的元素进行排序。花费Θ(nlgn)

permute-by-sorting(A)
1 n = A.length
2 let P[1…n] be a new array
3 for i =1 to n
4 P[i]= random(1, n3)
5 sort A, using P as sort keys

选1-n3, 是为了让P中所有的优先级尽可能都唯一。

引理 5.4 假设所有优先级都不同,则过程 permute-by-sorting 产生输入的均匀随机排列。

  1. 原址排列给定数组,在O(n)时间内完成。在进行第i 次迭代时,元素A[i]是从元素A[i]到A[n]中随机选取的。第i次迭代以后,A[i]不再改变。
    Randomize-in-place(A)
    1 n = A.length
    2 for i = 1 to n
    3 swap A[i] with A[random(i,n)]
    引理5.5 过程 Randomize-in-place 可计算出一个均匀随机排列。

5.4 四个例子

生日悖论
对屋子里k个人中的每一对(i,j),对1<=i<j<=k,定义指示器随机变量Xij如下:
Xij=I{i和j生日相同} = {1 如果i和j生日相同
0 其他
Pr{i和j生日相同} = 1/n
由引理5.1 E[Xij] = Pr{i和j生日相同} = 1/n
设X表示生日相同的两人成对的数目
X=Σi=1 to kΣj=i+1 to k Xij
E[X]=E[Σi=1 to kΣj=i+1 to k Xij] = Σi=1 to kΣj=i+1 to k E[Xij] = k*(k-1)/2n
因此,k*(k-1) >=2n时,E[X]>=1.求得k = 28
渐近阶数为Θ(√n)

球与箱子
把相同的球随机投到b个箱子里,每次投球都是独立的,每一次投球,球可能落在每一个箱子中,球落在任意一个箱子中的概率为1/b。

  1. 如果投n个球,落在指定箱子里的数目为n/b
  2. 平均意义下,需要投b个球,才能在给定的箱子里投中一个球
  3. 要投n次球,才能使每个箱子里至少有一个球 (n个伯努利实验,几何分布)
    成功的概率为(b-i+1)/b
    E[ni] = 1/[(b-i+1)/b] = b/(b-i+1)
    E[n] = E[Σ~i=1 to bni~] = Σ~i=1 to bE[ni~] = Σ~i=1 to b~( b/(b-i+1)) = b Σ~i=1 to b~(1/i) = b(lnb+O(1))
    n>=blnb

特征序列
假设抛硬币n次,最长连续正面的序列的期望长度为Θ(lgn)

在线雇佣问题
面试后要么直接雇佣,要么直接拒绝,只雇佣一次,如何在最小化面试次数和最大化应聘者质量之间取得平衡?

策略:选择正整数k<n,拒绝前k个人,再雇佣后面比前k个有更高分数的第一个应聘者,如果最优的出现在前k个人中,那么雇佣第n个人。

当k=n/e时,至少1/e的概率成功雇佣到最好的应聘者。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值