# 一、 为什么关心集中性(Concentration)

  • 通常我们只能知道一个随机过程的期望值(比如算法的平均运行时间),但这远远不够。

  • 我们希望了解:“实际结果通常不会离期望太远”,这就是集中性的概念。

举个例子:

  • 一个算法的期望运行时间是 5 秒,但它可能大多数时候运行 1 秒,偶尔运行 1 分钟。那这 “平均值” 就不能准确反映真实体验。

  • 所以我们需要知道:“它会不会很容易偏离期望?偏离的概率有多大?

# 二、几种重要的集中不等式(Concentration Inequalities)

#1. Markov 不等式

# ✅ 适用场景:

  • 所有非负的随机变量都适用。

  • 只需要知道期望 E[X]\mathbb{E}[X],不用知道方差或更复杂的结构。

# ✅ 数学形式:

Pr[Xt]E[X]tPr[X \ge t] \le \frac{\mathbb{E}[X]}{t}​

表示:X 超过 t 的概率,最多是期望除以 t。

# ✅ 例子理解:

如果一个随机变量的期望是 10,那么它超过 100 的概率最多是 0.1(也就是 10%)。

# ✅ 缺点:

  • 只提供单边控制(只能控制偏大,不能控制偏小)。

  • 界限较松,无法用于精准分析。


#2. Chebyshev 不等式

# ✅ 适用场景:

  • 任意随机变量都可以用。

  • 需要知道其方差 Var[X]\text{Var}[X]

# ✅ 数学形式:

Pr[XE[X]t]Var[X]t2\Pr\left[ |X - \mathbb{E}[X]| \ge t \right] \le \frac{\text{Var}[X]}{t^2}​

表示:X 偏离期望值 E[X]\mathbb{E}[X] 超过 t 的概率,最多是方差除以 t²。

# ✅ 例子理解:

如果一个变量的方差是 4,那么它偏离期望超过 5 的概率最多是 425=0.16\frac {4}{25} = 0.16254​=0.16。

# ✅ 优势:

  • 能控制双边偏离(太大、太小都控制)。

  • 当随机变量比较集中(方差小)时效果更好。


#3. Chernoff / Hoeffding 界

# ✅ 适用场景:

  • 随机变量是多个独立变量的和,比如重复进行的试验。

  • 每个变量的值在一定范围内(例如 [0,1])。

# ✅ 数学形式(简化版):

  • Chernoff Bound(相对偏离)

Pr[XE[X]>γE[X]]2e1/3γ2E[X]\Pr[ |X - \mathbb{E}[X]| > \gamma \mathbb{E}[X] ] \le 2 e^{-1/3\gamma^2 \mathbb{E}[X]}

# 参数解释:

  • X:一组独立随机变量之和,通常每个变量值在 [0,1]。

  • E[X]\mathbb{E}[X]:X 的期望(均值)。

  • γ\gamma:我们关心的相对偏离比例,即偏离期望的百分比。

    • 例如:若 γ=0.1\gamma = 0.1,表示我们关心的是 “X 超过期望值 10%” 的概率。
  • c:一个常数,通常是 1/3 或 1/2,根据具体形式而定。

  • 右边是指数衰减:表示偏离越多、期望越大,概率就越小,下降得越快。

  • Hoeffding Bound(绝对偏离)

\Pr[ |X - \mathbb{E}[X]| > t ] \le 2 e^

# 参数解释:

  • X:依然是一组独立、有界随机变量之和。

  • E[X]\mathbb{E}[X]:期望。

  • t:我们关心的绝对偏离距离

    • 例如:t = 5 表示我们关心 X 偏离期望超过 5 的概率。
  • n:是独立随机变量的数量(比如试验次数)。

  • ** 指数项中是 2t2/n-2t^2/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 算法。


#怎么转换?用集中不等式来做分析

# 方法概览

  1. 使用 Markov 不等式

    • 假设 Las Vegas 算法期望运行时间是 T。

    • 使用 Markov 得到:运行超过 kT 的概率 ≤ 1/k。

    • 所以,运行最多 100T 步,错误概率 ≤ 1%。

  2. 使用 Chebyshev 不等式(如果你知道方差):

    • 若运行时间的期望是 T,方差是 σ2\sigma^2

    • Chebyshev 给你:运行时间偏离 T 超过 t 的概率 ≤ σ2/t2\sigma^2 / t^2

    • 运行时间可以设为 T+10σT + 10\sigma,错误率 ≤ 1%。

  3. 使用 Chernoff Bound(最强):

    • 重复运行多次,每次运行最多 2T 时间;

    • 执行 O(log(1/δ))O(\log(1/\delta)) 次独立尝试,大多数情况下都会成功;

    • 得到运行时间 O(Tlog(1/δ))O(T \log(1/\delta)),错误概率 ≤ δ\delta


# 📌 总结这部分的关键点:

借助 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)


# 🔁 算法构造方法

用很简单的逻辑就行:

row
1
2
3
4
5
6
repeat:
run A on input x
let y be the output
until y is correct
return y


也就是:重复运行 Monte Carlo 算法,直到它的输出通过验证


# 🧠 一次尝试的时间成本:

  • 每次尝试花费:最多 T+O (1)(运行 + 验证)

# 🧠 我们令:

  • N:为得到正确输出所需的尝试次数
    (注意:每次尝试成功的概率 ≥ 1−p)

  • 想要算期望运行时间,即期望的:

    E[时间]=E[N]T\mathbb{E}[\text{时间}] = \mathbb{E}[N] \cdot T


# 💡 如何算 E[N]\mathbb{E}[N]

我们用尾和展开(Tail Sum Formula):

E[N]=k=1Pr[Nk]\mathbb{E}[N] = \sum_{k=1}^\infty \Pr[N \ge k]

  • 第一次失败的概率是 p

  • 第一次和第二次都失败:p2p^2

  • 第三次也失败:p3p^3

  • 所以:

\mathbb{E}[N] = 1 + p + p^2 + p^3 + \cdots = \frac{1}


# ✅ 最后结论:

  • 期望尝试次数: E[N]=1/(1p)=O(1)\mathbb{E}[N] = 1/(1 - p) = O(1)

  • 所以期望运行时间:E[time]=T/(1p)=O(T)\mathbb{E}[\text{time}] = T/(1 - p) = O(T)

# 四、概率放大(Probability Amplification)

# 🧠 为什么需要概率放大?

很多 Monte Carlo 算法的成功率只保证 ≥ 2/3 或 1/2,但我们在实际应用中可能希望成功概率非常高(如 ≥ 99.9999%)。为此,我们可以使用概率放大技巧来提升成功率。


# ✅ 常用方法

# 1. 多数投票法(Majority Vote)

适用场景:算法输出为布尔值(0 或 1)

做法

  • 将算法独立运行 kk 次,得到结果 y1,y2,,yky_1, y_2, \dots, y_k
  • 返回多数中的结果(majority vote)

效果

  • 如果单次成功概率 ≥ 2/3
  • 通过 Chernoff Bound 可知,设置 k=O(log(1/δ))k = O(\log(1/\delta)),则错误概率 ≤ δ\delta

# 2. 中位数法(Median Trick)

适用场景:输出为实数(比如估计均值、距离、概率等)

做法

  • 独立运行算法 kk 次,得到输出 x1,x2,,xkx_1, x_2, \dots, x_k
  • 返回中位数(median)作为最终结果

为什么用中位数而不是平均值?

  • 平均值容易受到极端值影响(outliers)
  • 中位数对异常值更鲁棒,更稳定可靠

效果

  • 只要每次输出 “接近正确” 的概率 ≥ 2/3
  • 设置 k=O(log(1/δ))k = O(\log(1/\delta)) 后,最终结果距离正确值非常小,错误概率 ≤ δ\delta

# 🔁 方法对比表

方法适用输出类型聚合策略错误概率降低到
多数投票布尔值 (0/1)取多数δ\delta(通过 Chernoff)
中位数技巧实数类输出取中位数δ\delta

# ✅ 结论

只要你原始算法的成功率 大于 1/2,就可以通过重复运行 + 投票或中位数,将成功率提升到任意接近 1,而运行时间仅为 O(log(1/δ))O(\log(1/\delta)) 倍数。

1
2
3
4
# 示例(伪代码):
repeat k = O(log(1/δ)) times:
run MonteCarloAlgorithm(x) → get y_i
return majority(y_1, ..., y_k) # 或 median(y_1, ..., y_k)

# 五、并集界(Union Bound)

# 🧠 核心思想

当你面对多个可能失败的事件时,想要估计至少一个失败的概率,可以使用 Union Bound(联合界限):
Pr[E1E2Ek]Pr[E1]+Pr[E2]++Pr[Ek]\Pr[E_1 \cup E_2 \cup \dots \cup E_k] \le \Pr[E_1] + \Pr[E_2] + \dots + \Pr[E_k]

即:

“至少一个坏事件发生” 的概率,最多等于各个事件发生概率之和。


# ✅ 应用场景

  • 分析多个 “坏事件” 的概率(如某个采样失败、算法分支失败)
  • 给每个事件单独算概率,然后用 Union Bound 控制整体风险

# 📌 举个例子

假设你有 3 个独立事件:

  • 事件 A 失败概率是 0.01
  • 事件 B 失败概率是 0.03
  • 事件 C 失败概率是 0.02

那么:

Pr[A or B or C fail]0.01+0.03+0.02=0.06\Pr[\text{A or B or C fail}] \le 0.01 + 0.03 + 0.02 = 0.06


# ✅ 重要特性

  • 无需事件独立:适用于任意事件(即使相互依赖)
  • 非常保守(松),但非常简单实用
  • 和 “期望线性” 一起,被称为算法分析最有用的两个工具

# ✅ 推论(对偶形式)

如果你想知道 “所有事件都不发生” 的概率,也可以用 Union Bound 得到下界:

Pr[none ofE1,,Ekhappen]1i=1kPr[Ei]\Pr[\text{none of } E_1, \dots, E_k \text{ happen}] \ge 1 - \sum_{i=1}^k \Pr[E_i]


# 🧠 小结

用法公式形式
至少一个事件发生的概率上界Pr[E1Ek]Pr[Ei]\Pr[E_1 \cup \cdots \cup E_k] \le \sum \Pr[E_i]
所有事件都不发生的概率下界Pr[none ofEi]1Pr[Ei]\Pr[\text{none of } E_i] \ge 1 - \sum \Pr[E_i]

# 🔧 常见用途:

  • 分析随机化算法中多个 “坏情况” 的总出错概率
  • 在算法设计中做 “整体成功率保证”
  • 与 Chebyshev/Chernoff 等集中不等式结合使用

# 🎲 一个例子:Randomized Median 算法

# 🧩 问题描述

给定一个乱序数组 A ,包含 nn互不相同的整数,目标是找到它的中位数


# ⚙️ 算法思路(Randomized Median)

核心想法:通过随机采样 + 缩小候选范围,在 O(n)O(n) 时间内找到中位数。

步骤如下:

  1. 随机采样

    • 从原数组 AA 中随机选出一个大小为 mm 的子集 SS
  2. 求样本中位数

    • SS 中找到中位数 bb
  3. 分区操作

    • 根据 bbAA 划分为三部分:
      • 小于 bb 的元素
      • 等于 bb 的元素
      • 大于 bb 的元素
  4. 判断中位数位置

    • 通过计数判断中位数属于哪个区间,再在那个子区间递归处理

# ⏱️ 算法运行时间分析

总时间复杂度为:
O(mlogm)+O(n)+O((nm)log(nm))O(m \log m) + O(n) + O\left(\left(\frac{n}{\sqrt{m}}\right) \log \left(\frac{n}{\sqrt{m}}\right)\right)

选择 m=nm = \sqrt{n} 可以使整体时间变为:

[
O(n)O(n)
]

✅ 这是一个 Monte Carlo 算法:运行时间快,但存在小概率出错。


# ⚠️ 错误风险与控制手段

算法失败的情况:

  • 样本中位数 bb 偏离真实中位数太多
  • 某个子区间太大,递归成本升高

控制方法:

  • 使用 Chernoff Bound 分析偏差概率
  • Union Bound 控制多个坏事件的总概率
  • 使用 概率放大(Median Trick) 提高成功率

# ✅ 总结

特性描述
类型随机化(Monte Carlo)算法
平均运行时间O(n)O(n)
错误概率可通过概率放大控制在任意小
技术亮点随机采样、集中不等式、放大技巧

# 💡 应用意义

该算法是采样思想 + 概率分析的经典结合,也是分析复杂随机算法的典范。在实际中被广泛用于排序、分位数估计、大数据子采样等领域。

更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

IRON 微信支付

微信支付

IRON 支付宝

支付宝

IRON 贝宝

贝宝