第5章_概率分析和随机算法_算法分析与设计_杭电_褚一平
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
即:事件A对应的指示器随机变量的期望值等于 事件A发生的概率
5.2指示器随机变量
[例]确定在抛一枚均匀硬币时正面朝上的 期望次数
样本空间为S = {H, T },定义随机变量Y,取值 H和T的概率各为1/2,则:
XH 1 如果H 发生 I{Y H } 0 如果T 发生
抛硬币时正面朝上的期望次数就是XH的期望 值:
[证明] 定义循环不变式: 每次for循环迭代之前,对每个可能的(i-1)排 列,子数组包含这个(i-1)排列的概率是(ni+1)!/n! 如果此循环不变式成立,终止时i = n + 1,可 知对于任何排列,出现概率为(n-n+1)/n! = 1/n!
5.3随机算法
(续上页)
初始化:i = 1时,排列有0个元素,概率为1 保持:假设i迭代之前,每种(i-1)排列出现在 子数组A[1..i-1]的概率是(n- i +1)!/n!
X Xi
i 1
E[ X ] E[X i] E[ X i ] 1/ 2 n / 2
i 1 i 1 i 1
n
n
n
5.2指示器随机变量
利用指示器随机变量分析雇用问题
离散随机变量X的期望值:E[ X ] x Pr{X x}
x
假设应聘者以随机的顺序出现 X为雇用一个新的办公助理的次数 令Xi对应于第i个应聘者被雇用的指示器随机 变量
5.2指示器随机变量
定义
给定一个样本空间S和事件A,那么事件A对应的指 示器随机变量 I {A} 定义为 1 如果A发生的话 { }I A 0 如果A不发生的话
引理(Lemma5.1)
给定样本空间S和S中的事件A,令XA = I{A},则 E[XA]= Pr{A} 证明:由定义,有 E[ X A ] E[ I{ A}] 1* Pr{ A} 0* Pr{ Ā} Pr{ A} 其中Ā表示A的补S – A
考虑某个i 排列,以<x1, x2, ..., xi>来表示其中 的元素
记事件E1为前(i - 1)排列为<x1, ..., xi-1> 记事件E2为第i次迭代在A[i]里放置值xi
5.3随机算法
(续上页)
保持: 由于剩下n -i+1个等可能的数,条件概率 Pr{E2|E1} = 1/(n- i +1) 因此
许多情况下,输入分布并不可知或无法建模 通过控制输入,强加随机次序 假设雇佣代理有n个应聘者,而且事先给我们一份应聘 者的名单,每天我们随机选择其中一个来面试。==我们 控制了应聘者的来到过程并强加了随机次序,而不是依 赖于随机次序到达这个猜测。 如果一个算法的行为不只是由输入决定,同时也由随机 数生成器所产生的数值决定,则称这个算法是随机的。 Random(a,b)返回一个a与b之间的整数,而每个整数出 现的机会相等。 大多数编程环境都提供一个伪随机数生成器,它是一个 确定性的算法,但是其返回值看起来是统计上随机的。
4 5 6 7
do interview candidate i if candidate i is better than candidate best then best ← i
hire candidate i
期望雇用费用是O(ch ln n)
5.3随机算法
随机排列数组
输入:一个数组A,它包含元素1到n 输出:数组的一个随机排列 算法1:
第5章 概率分析和随机 算法
第5章 概率分析和随机算法 本章简介
概率分析 指示器随机变量 随机算法 进一步应用
5.1雇用问题 雇用一名新的办公室助理,雇用代 理每天给你推荐一个应聘者,面试 和雇用都需要费用,但雇用的费用 更高,预测费用 策略:假设应聘者编号为1到n,面试 完应聘者i之后,如果i是你见过的最 适当人选,则雇用i
给每个元素A[i]赋一个随机的优先级P[i] 然后依据优先级对数组A中的元素进行排 序。
5.3随机算法
PERMUTE-BY-SORTING(A) 1 n ← length[A] 2 for i ← 1 to n 3 do P[i] = RANDOM(1, n3) 4 sort A, using P as sort keys 5 return A 使用范围1到n3,是为了让P中的优先级尽可能唯一 (可以证明这种情况概率至少为1-1/n) 复杂度:Θ(nlgn)
1 (ln n
ln 1)n k
令导数等于0,k=n/e 所以,如果用k=n/e来实现我们的策略, 则可以以至少1/e的概率成功雇用到最有 资格的应聘者
得证
5.3随机算法
(续上页)
扩展此证明,考虑{1, 2, ..., n}的任一排列 σ=<σ(1), σ(2),...,σ(n)>,定义Xi为元素A[i] 得到优先级σ(i)的事件,那么同样的证明仍 然适用,其概率也是1/n!
[注意]每个元素A[i]处于位置j的概率是1/n并不 能推出排列是均匀随机排列
引理5.2:假设应聘者以随机的次序出 现,算法HIRE-ASSISTANT总的雇佣费 用为O(ch ln n)
5.3随机算法
许多时候无法知道有关输入的信息 一种做法是对输入进行控制,强加随机性
并不改变期望值 依赖于随机的选择 对所有输入都是同样的期望值
如果应聘者是以随机顺序出现的话,则雇用一个新的办公 室助理的期望次数大约是lnn。(概率分析算法是确定性的) 对于任何特定的输入,雇用一个行的办公室助理的次数始 终相同。此外,这个次数随输入的变化而变化: A1 =<1,2,3,4,5,6,7,8,9,10>; 10次雇用 A2 =<10,9,8,7,6,5,4,3,2,1>; 1次雇用 A3 =<5,2,1,8,4,7,10,9,3,6>; 3次雇用 随机算法的随机发生在算法上,而不是发生自输入分布 上。输入A3 我们无法说出雇用次数,可能10次,可能3次
1 第i位应聘者被雇用 X i I{第i位应聘者被雇用} 否则 0
由于假设顺序随机,所以前i个任何一个等可 能的是目前最有资格的,因此E[Xi]=1/i
5.2指示器随机变量
利用指示器随机变量分析雇用问题(续)
X=X1+X2+…+Xn 因此
n i 1 n i 1 n i 1
因此,由调和级数,平均情况下,大约只雇 用了lnn个人,总费用为O(ch ln n)
5.3随机算法
随机排列数组(续)
算法2:将A[i~n]中的值随机选一个置于A[i]
RANDOMIZE-IN-PLACE(A) 1 n ← length[A] 2 for i ← 1 to n 3 do swap A[i] ↔ A[RANDOM(i, n)]
5.3随机算法
算法2产生的是均匀随机排列
选择一个正整数k<n,面试前k个应聘者并拒 绝他们,再雇佣其后比前面所有应聘者分数 更高的第一个应聘者 如果没有这样的人,雇佣第n个应聘者
5.4.4在线雇用问题
1
对每个可能的k值,希望能确定雇用到最 好应聘者的概率。 概率最高的k值可以用来最好的实现这个 策略
5.4.4在线雇用问题
M ( j) max1i j {score(i)} :应聘者1到j中最高分
5.1雇用问题
HIRE-ASSISTANT(n)
1 best ← 0 ▷ candidate 0 is a least-qualified dummy candidate 2 for i ← 1 to n 3 do interview candidate i 4 if candidate i is better than candidate best 5 then best ← i 6 hire candidate i
5.3随机算法
引理:假设所有优先级唯一,上述算法可以产 生一个均匀随机排列
证明:首先证明对于A[i]得到第i小的优先级的特殊排列 (也即输出与输入一致),出现概率为1/n! 令Xi代表元素A[i]得到第i(i = 1, 2, ..., n)小的优先级的事 件,所有事件发生概率为: Pr {X1 ∩ X2 ∩ X3 ∩ · ∩ Xn-1 ∩ Xn} · · 可以证明这个概率等于(参见《算法导论》附录C):
Pr{E2 E1} Pr{E2 | E1}* Pr{E1} (1/ n i 1)(n i 1)!/ n! (n i)!/ n!
终止:i=n+1,子数组A[1..n]概率为(n– n+1)!/n!=1/n!.
5.4.4在线雇用问题
假设现在不想面试所有的人而且只想雇佣 一次,于是给每个面试者i打不相同的分 score(i),并采用如下策略:
Pr{ X1 } * Pr{ X2 | X1 } * Pr{ X3 | X2∩X1 } · Pr{ Xi | Xi-1∩Xi-2∩·∩X1 } · · · · · Pr{ Xn | Xn-1∩·∩X1 } · · · ·
5.3随机算法
(续上页)
Pr{ X1 }是n个元素中优先级最小的概率为1/n Pr{ X2 | X1 },余下有n-1个元素,所以概率为1/(n-1) 一般的, Pr{ X i | X i 1 X i 2 X1} 1/ (n i 1) 所以 1 1 11 1 X X n n1 2 1 n!
S:我们成功选择的是最好应聘者的事件 Si:当最好的应聘者是第i个面试者时成功 的事件
根据策略有:Pr{Si}=0,1≤i ≤ k
n
S
i k 1
5.4.4在线雇用问题
Bi:最好的应聘者在第i个位置上的事件
最大值可以是任意一个位置:Pr{Bi}=1/n [注意]即使k+1≤i≤n, Bi != Si
E[ X H ] E[ I{Y H }] 1* Pr{Y H } 0* Pr{Y T } 1*(1/ 2) 0*(1/ 2) 1/ 2
5.2指示器随机变量
计算抛n次硬币时正面朝上的次数
令指示器随机变量Xi为第i次抛硬币时正面朝上 的事件,随机变量X标示n次抛硬币中出现正 面的总次数, 于是: n
5.3随机算法
RANDOMIZED-HIRE-ASSISTANT(n) 1 randomly permute the list of candidates 2 best ← 0 ▷ candidate 0 is a least-qualified dummy candidate 3 for i ← 1 to n
5.1雇用问题
关心的不是运行时间,而是费用,但分析 技术是一样的
记面试费用为ci,雇用费用为ch,则总费 用为O(nci + mch) 应聘者数量固定为n,所以只需要分析 mch,这个量在算法的每次执行中都会改 变
5.1雇用问题
最坏情况分析
应聘者以资质递增顺序出现 雇用了n次,总费用O(nch)
概率分析
不能得知出现顺序也不能控制 假设随机顺序出现,亦即每种出现顺序是等可 能的,然后分析算法,计算出一个期望的运行 时间 实际上是将所有可能数据的运行时间平均 <rank(1), rank(2),…,rank(n)>是序列<1,2,…,n> 的一个排列,n!种可能,等概率出现
5.1雇用问题
随机算法
k
n k 1 n
而:
n 1
k 1 n(i 1) n k 1 i 1
k 1
n
k
i
k
k k 所以: (ln n ln k ) Pr{S} (ln(n 1) ln(k 1)) n n
5.4.4在线雇用问题
我们希望最大化成功概率,因而主要关注 如何选取k的值,使其能最大化Pr{S}的下 界 将 k / n ln n ln k 求导,得
Oi:k+1到i-1中没有应聘者被选取的事件
当k+1≤j≤i-1时,score(j)<bestscore
仅取决于1到i-1的排列情况,与Bi是独立事件 同样,前i-1个应聘者分数最高的可以是任意 一个位置,所以Pr{Oi}=k/(i-1)
Baidu Nhomakorabea
5.4.4在线雇用问题
要想雇用到第i个应聘者(Si),必须同时有 发生Bi和Oi