概率不等式
算法竞赛中有时会用到 随机化算法,这些算法的正确性与时空复杂度通常依赖于「某些随机事件发生的概率很小」这一前提。例如,快速排序的复杂度依赖于「所选的 pivot
元素几乎是最小或最大元素」这一事件较少发生。
本文将简要介绍一些用于分析随机化算法的工具并给出几个简单应用的例子。
Union Bound
记
即:一组事件中至少一个发生的概率,不超过每一个的发生概率之和。
实际上,这一结论还可以稍作加强:
- 一组事件中至少一者发生的概率,不小于 每一个的发生概率之和,减掉每两个同时发生的概率之和。
- 一组事件中至少一者发生的概率,不超过 每一个的发生概率之和,减掉每两个同时发生的概率之和,加上每三个同时发生的概率之和。
- ……
随着层数越来越多,交替出现的上界和下界也越来越紧。这一系列结论形式上类似容斥原理,证明过程也和容斥类似,这里略去。
Markov 不等式
设
事实上,由于 Markov 不等式本身并没有用到随机变量除期望外的与分布有关的任何信息,因此直接应用这个不等式得到的约束通常很松。
证明
记
进而
Chebyshev 不等式
设
特别地,当
其中
证明
由已知,有
注意到
Chernoff 不等式
一般的 Chernoff 不等式可以从直接对随机变量
设
类似地,当
Poisson 试验之和的 Chernoff 不等式
算法竞赛中涉及的随机变量通常没有那么「一般」,我们可以用概率论中的 Poisson 试验对其进行描述。
所谓 Poisson 试验,是指在只有两种可能结果的随机试验。
一次的 Poisson 试验的结果可以用一个取值为
对于 Poisson 试验,我们有如下结论:
对于
Hoeffding 不等式
若
Chernoff 不等式和 Hoeffding 不等式都限制了随机变量偏离其期望值的程度。这两个不等式的证明过程较为冗长,有兴趣的同学可以查阅 Probability and Computing 一书中的相关章节。
从经验上讲,如果
应用举例
例:随机撒点估算圆周率
考虑下列估计圆周率
在正方形区域
问题:若要保证上述算法以至少
记
上式等价于
根据 Chernoff 不等式,我们只需令
即可,由此可解得
即当
随机算法的正确性或复杂度经常依赖于某些“坏事件”不发生或很少发生。例如,快速排序的复杂度依赖于“所选的 pivot
元素几乎是最小或最大元素”这一坏事件较少发生。
本节介绍几个常用于分析“坏事件”发生概率的工具。
例:抽奖问题
一个箱子里有
假如只有一个奖球,则抽取
现在有
例:随机选取一半元素
给出一个算法,从
首先可以想到这样的算法:
- 通过抛
次硬币,可以从所有子集中等概率随机选一个。 - 不断重复这一过程,直到选出的子集大小恰好为
。- 注意到大小为
的子集至少占所有子集的 ,因此重复次数的期望值 。
- 注意到大小为
这一算法期望需要抛
另一个算法:
-
我们可以通过抛期望
次硬币来实现随机 选 1。- 具体方法:随机生成
位的二进制数,如果大于等于 则重新随机,否则选择对应编号(编号从 0 开始)的元素并结束过程。
- 具体方法:随机生成
-
然后我们从所有元素中选一个,再从剩下的元素中再选一个,以此类推,直到选出
个元素为止。
这一算法期望需要抛
将两个算法缝合起来:
-
先用第一个算法随机得到一个子集。
-
如果该子集大小不到
,则利用第二个算法不断添加元素,直到将大小补到 。 -
如果该子集大小超过
,则利用第二个算法不断删除元素,直到将大小削到 。
尝试分析第二、第三步所需的操作次数(即添加/删除元素的次数):
- 记 01 随机变量
表示 是否被选入初始的子集,令 表示子集大小,则第二、第三步所需的操作次数等于 。在 Hoeffding 不等式中取 (其中 为任意常数),得到 。也就是说,我们可以通过允许 级别的偏移,来得到任意小的常数级别的失败概率。
至此我们已经说明:该算法可以以很大概率保证抛硬币次数在
- 其中
来自获得初始子集的抛硬币次数; 是 次添加/删除元素的总开销。
我们再从另一个角度分析,尝试计算该算法的期望抛硬币次数。
用 Hoeffding 不等式求第二、第三步中操作次数期望值的上界:
从而第二、第三步所需抛硬币次数的期望值是
综上,该算法期望需要抛
练习:Balls and Bins
本页面最近更新:2/3/2023, 12:00:00 AM,更新历史
发现错误?想一起完善? 在 GitHub 上编辑此页!
本页面的全部内容在 CC BY-SA 4.0 和 SATA 协议之条款下提供,附加条款亦可能应用