# 一、 为什么关心集中性(Concentration)
通常我们只能知道一个随机过程的期望值(比如算法的平均运行时间),但这远远不够。
我们希望了解:“实际结果通常不会离期望太远”,这就是集中性的概念。
举个例子:
一个算法的期望运行时间是 5 秒,但它可能大多数时候运行 1 秒,偶尔运行 1 分钟。那这 “平均值” 就不能准确反映真实体验。
所以我们需要知道:“它会不会很容易偏离期望?偏离的概率有多大?”
# 二、几种重要的集中不等式(Concentration Inequalities)
# ✅ 1. Markov 不等式
# ✅ 适用场景:
所有非负的随机变量都适用。
只需要知道期望 ,不用知道方差或更复杂的结构。
# ✅ 数学形式:
表示:X 超过 t 的概率,最多是期望除以 t。
# ✅ 例子理解:
如果一个随机变量的期望是 10,那么它超过 100 的概率最多是 0.1(也就是 10%)。
# ✅ 缺点:
只提供单边控制(只能控制偏大,不能控制偏小)。
界限较松,无法用于精准分析。
# ✅ 2. Chebyshev 不等式
# ✅ 适用场景:
任意随机变量都可以用。
需要知道其方差
# ✅ 数学形式:
表示:X 偏离期望值 超过 t 的概率,最多是方差除以 t²。
# ✅ 例子理解:
如果一个变量的方差是 4,那么它偏离期望超过 5 的概率最多是 425=0.16\frac {4}{25} = 0.16254=0.16。
# ✅ 优势:
能控制双边偏离(太大、太小都控制)。
当随机变量比较集中(方差小)时效果更好。
# ✅ 3. Chernoff / Hoeffding 界
# ✅ 适用场景:
随机变量是多个独立变量的和,比如重复进行的试验。
每个变量的值在一定范围内(例如 [0,1])。
# ✅ 数学形式(简化版):
- Chernoff Bound(相对偏离):
# 参数解释:
X:一组独立随机变量之和,通常每个变量值在 [0,1]。
:X 的期望(均值)。
:我们关心的相对偏离比例,即偏离期望的百分比。
- 例如:若 ,表示我们关心的是 “X 超过期望值 10%” 的概率。
c:一个常数,通常是 1/3 或 1/2,根据具体形式而定。
右边是指数衰减:表示偏离越多、期望越大,概率就越小,下降得越快。
Hoeffding Bound(绝对偏离):
\Pr[ |X - \mathbb{E}[X]| > t ] \le 2 e^
# 参数解释:
X:依然是一组独立、有界随机变量之和。
:期望。
t:我们关心的绝对偏离距离。
- 例如:t = 5 表示我们关心 X 偏离期望超过 5 的概率。
n:是独立随机变量的数量(比如试验次数)。
** 指数项中是 :
越多样本(n 越大)→ 偏离概率越小;
偏离越远(t 越大)→ 概率也迅速变小。
(实际常有系数和不同条件,但核心是:偏离概率指数级下降)
# ✅ 优势:
比前两个不等式都强大得多,偏离概率随着样本数量指数级变小。
非常适合在算法中分析多数投票、采样估计等问题。
# ✅ 区别:
Chernoff 关注相对偏离(偏离多少比例)。
Hoeffding 关注绝对偏离(偏离固定数值)。
# 三、Las Vegas 与 Monte Carlo 转化
# 🔄 Las Vegas 算法 vs Monte Carlo 算法
类型 | 特点 |
---|---|
Las Vegas | 一定返回正确结果,但运行时间不确定(有随机性)。 |
Monte Carlo | 运行时间固定或可控,但结果可能错误(有失败概率)。 |
# Las Vegas -> Monte Carlo
# 🤔 为什么要转换?
在实际应用中,我们常常希望程序有时间限制,哪怕牺牲一点精度。因此我们希望把 “不确定时间但一定对” 的 Las Vegas 算法,改造成 “运行时间有上限” 的 Monte Carlo 算法。
# ✅ 怎么转换?用集中不等式来做分析
# 方法概览:
使用 Markov 不等式:
假设 Las Vegas 算法期望运行时间是 T。
使用 Markov 得到:运行超过 kT 的概率 ≤ 1/k。
所以,运行最多 100T 步,错误概率 ≤ 1%。
使用 Chebyshev 不等式(如果你知道方差):
若运行时间的期望是 T,方差是 ,
Chebyshev 给你:运行时间偏离 T 超过 t 的概率 ≤ 。
运行时间可以设为 ,错误率 ≤ 1%。
使用 Chernoff Bound(最强):
重复运行多次,每次运行最多 2T 时间;
执行 次独立尝试,大多数情况下都会成功;
得到运行时间 ,错误概率 ≤ 。
# 📌 总结这部分的关键点:
借助 Markov / Chebyshev / Chernoff 等集中不等式,我们可以设定一个最大运行时间,然后在此时间内执行 Las Vegas 算法,从而变成 Monte Carlo 算法,同时控制出错概率。
# Monte Carlo -> Las Vegas
# 🧾 定理:可以变 Las Vegas 的条件
如果你有一个 Monte Carlo 算法 A,它的:
最坏情况运行时间是 T
错误概率是 p<1
并且我们可以在 O (1) 时间内验证输出是否正确
👉 那么你可以构造一个新的 Las Vegas 算法 A′,它:
保证输出永远正确
期望运行时间仍然是 O (T)
# 🔁 算法构造方法
用很简单的逻辑就行:
1 | repeat: |
也就是:重复运行 Monte Carlo 算法,直到它的输出通过验证。
# 🧠 一次尝试的时间成本:
- 每次尝试花费:最多 T+O (1)(运行 + 验证)
# 🧠 我们令:
N:为得到正确输出所需的尝试次数
(注意:每次尝试成功的概率 ≥ 1−p)想要算期望运行时间,即期望的:
# 💡 如何算 ?
我们用尾和展开(Tail Sum Formula):
第一次失败的概率是 p
第一次和第二次都失败:
第三次也失败:
所以:
\mathbb{E}[N] = 1 + p + p^2 + p^3 + \cdots = \frac{1}
# ✅ 最后结论:
期望尝试次数:
所以期望运行时间:
# 四、概率放大(Probability Amplification)
# 🧠 为什么需要概率放大?
很多 Monte Carlo 算法的成功率只保证 ≥ 2/3 或 1/2,但我们在实际应用中可能希望成功概率非常高(如 ≥ 99.9999%)。为此,我们可以使用概率放大技巧来提升成功率。
# ✅ 常用方法
# 1. 多数投票法(Majority Vote)
适用场景:算法输出为布尔值(0 或 1)
做法:
- 将算法独立运行 次,得到结果
- 返回多数中的结果(majority vote)
效果:
- 如果单次成功概率 ≥ 2/3
- 通过 Chernoff Bound 可知,设置 ,则错误概率 ≤
# 2. 中位数法(Median Trick)
适用场景:输出为实数(比如估计均值、距离、概率等)
做法:
- 独立运行算法 次,得到输出
- 返回中位数(median)作为最终结果
为什么用中位数而不是平均值?
- 平均值容易受到极端值影响(outliers)
- 中位数对异常值更鲁棒,更稳定可靠
效果:
- 只要每次输出 “接近正确” 的概率 ≥ 2/3
- 设置 后,最终结果距离正确值非常小,错误概率 ≤
# 🔁 方法对比表
方法 | 适用输出类型 | 聚合策略 | 错误概率降低到 |
---|---|---|---|
多数投票 | 布尔值 (0/1) | 取多数 | (通过 Chernoff) |
中位数技巧 | 实数类输出 | 取中位数 |
# ✅ 结论
只要你原始算法的成功率 大于 1/2,就可以通过重复运行 + 投票或中位数,将成功率提升到任意接近 1,而运行时间仅为 倍数。
1 | # 示例(伪代码): |
# 五、并集界(Union Bound)
# 🧠 核心思想
当你面对多个可能失败的事件时,想要估计至少一个失败的概率,可以使用 Union Bound(联合界限):
即:
“至少一个坏事件发生” 的概率,最多等于各个事件发生概率之和。
# ✅ 应用场景
- 分析多个 “坏事件” 的概率(如某个采样失败、算法分支失败)
- 给每个事件单独算概率,然后用 Union Bound 控制整体风险
# 📌 举个例子
假设你有 3 个独立事件:
- 事件 A 失败概率是 0.01
- 事件 B 失败概率是 0.03
- 事件 C 失败概率是 0.02
那么:
# ✅ 重要特性
- 无需事件独立:适用于任意事件(即使相互依赖)
- 非常保守(松),但非常简单实用
- 和 “期望线性” 一起,被称为算法分析最有用的两个工具
# ✅ 推论(对偶形式)
如果你想知道 “所有事件都不发生” 的概率,也可以用 Union Bound 得到下界:
# 🧠 小结
用法 | 公式形式 |
---|---|
至少一个事件发生的概率上界 | |
所有事件都不发生的概率下界 |
# 🔧 常见用途:
- 分析随机化算法中多个 “坏情况” 的总出错概率
- 在算法设计中做 “整体成功率保证”
- 与 Chebyshev/Chernoff 等集中不等式结合使用
# 🎲 一个例子:Randomized Median 算法
# 🧩 问题描述
给定一个乱序数组 A
,包含 个互不相同的整数,目标是找到它的中位数。
# ⚙️ 算法思路(Randomized Median)
核心想法:通过随机采样 + 缩小候选范围,在 时间内找到中位数。
步骤如下:
随机采样:
- 从原数组 中随机选出一个大小为 的子集
求样本中位数:
- 在 中找到中位数
分区操作:
- 根据 将 划分为三部分:
- 小于 的元素
- 等于 的元素
- 大于 的元素
- 根据 将 划分为三部分:
判断中位数位置:
- 通过计数判断中位数属于哪个区间,再在那个子区间递归处理
# ⏱️ 算法运行时间分析
总时间复杂度为:
选择 可以使整体时间变为:
[
]
✅ 这是一个 Monte Carlo 算法:运行时间快,但存在小概率出错。
# ⚠️ 错误风险与控制手段
算法失败的情况:
- 样本中位数 偏离真实中位数太多
- 某个子区间太大,递归成本升高
控制方法:
- 使用 Chernoff Bound 分析偏差概率
- 用 Union Bound 控制多个坏事件的总概率
- 使用 概率放大(Median Trick) 提高成功率
# ✅ 总结
特性 | 描述 |
---|---|
类型 | 随机化(Monte Carlo)算法 |
平均运行时间 | |
错误概率 | 可通过概率放大控制在任意小 |
技术亮点 | 随机采样、集中不等式、放大技巧 |
# 💡 应用意义
该算法是采样思想 + 概率分析的经典结合,也是分析复杂随机算法的典范。在实际中被广泛用于排序、分位数估计、大数据子采样等领域。