← 返回内容列表

为什么快排平均 O(n log n):主定理情况3与随机化

分享本文
为什么快排平均 O(n log n):主定理情况3与随机化

快速排序最坏 O(n²),但平均却是 O(n log n)。用主定理的"期望"视角 + 随机化基准,能说清为什么"平均"就是分治的标准答案。

快速排序:选基准 → 分区(小的放左、大的放右)6382915pivot=6分区后3215689左<6pivot右>6再对左右两段递归,即完成快排

图:以 6 为基准的一次分区过程

快速排序的递推式写作 T(n)=T(q)+T(nq1)+Θ(n)T(n)=T(q)+T(n-q-1)+\Theta(n),其中 qq 是基准最终位置。最坏 q=0q=0n1n-1 时退化为 T(n)=T(n1)+Θ(n)=Θ(n2)T(n)=T(n-1)+\Theta(n)=\Theta(n^2)(减法型,主定理不管)。但平均情况下,随机化让 qq 均匀分布在 $1..n$,每个划分期望把区间分成"大致两半"。

平均情况的递归树

期望上,每层划分代价 Θ(n)\Theta(n),树的期望深度 Θ(logn)\Theta(\log n),于是期望总代价 Θ(nlogn)\Theta(n\log n)。这正是主定理"情况3 / 均衡划分"的工程版:随机化把最坏的输入顺序"打散",让期望划分接近均分。

参考代码:随机化快排

import random

def quicksort(a):
    if len(a)  p]
    return quicksort(left) + mid + quicksort(right)

# 期望 T(n)=Θ(n log n);最坏(已序且固定首元)才 Θ(n^2)
print(quicksort([5, 2, 4, 6, 1, 3]))

主定理严格说只处理 aT(n/b)aT(n/b) 这种"均分"形式;快排的"期望均分"是它的现实映射——随机化让平均就等于主定理的情况2/3。

关联推荐

评论 (0)

正文划词可点「问萝卜特」——自动发评论并由 AI 回复

加载评论中…

为什么快排平均 O(n log n):主定理情况3与随机化 | 必学必会