双枢轴快速排序的最优分区方法
1. 双枢轴快速排序分析的基本方法
在双枢轴快速排序中,我们假设输入序列 $(a_1, \ldots, a_n)$ 是 ${1, \ldots, n}$ 的一个随机排列,每个排列出现的概率为 $(1/n!)$。具体处理方式如下:
- 若 $n \leq 1$,无需进行排序操作。
- 若 $n = 2$,通过一次比较即可完成排序。
- 若 $n > 2$,选取第一个元素 $a_1$ 和最后一个元素 $a_n$ 作为枢轴,设 $p = \min(a_1, a_n)$,$q = \max(a_1, a_n)$。将其余元素划分为小于 $p$ 的“小”元素、介于 $p$ 和 $q$ 之间的“中”元素以及大于 $q$ 的“大”元素。然后对这三组元素递归地应用该过程。
我们用关键比较次数来衡量排序的成本,设 $C_n$ 为统计该次数的随机变量,$P_n$ 表示将 $n - 2$ 个非枢轴元素划分为三组的分区成本。平均关键比较次数遵循以下递推关系:
$E(C_n) = E(P_n) + \frac{1}{\binom{n}{2}} \cdot 3 \sum_{k = 0}^{n - 2} (n - k - 1) \cdot E(C_k)$
若 $E(P_n) = a \cdot n + O(1)$($a$ 为常数),则可解得 $E(C_n) = \frac{6}{5}a \cdot n \ln n + O(n)$。
抽象来看,这就转化为一个“分类问题”:给定 ${1, \ldots, n}$ 的随机排列 $(a_1, \ldots, a_n)$ 作为输入序列,以 $a_1$ 和 $a_n$ 为枢轴 $p$ 和
超级会员免费看
订阅专栏 解锁全文
10

被折叠的 条评论
为什么被折叠?



