【发布时间】:2011-04-23 21:53:00
【问题描述】:
我正在研究基于the Select algorithm 的快速排序变体实现,以选择一个好的枢轴元素。传统的智慧似乎是将数组分成 5 个元素的块,取每个块的中值,然后递归地对生成的中值应用相同的分块方法以获得“中值的中值”。
让我困惑的是选择 5 元素块而不是 3 元素块。在我看来,对于 5 元素块,您执行 n/4 = n/5 + n/25 + n/125 + n/625 + ... median-of-5 操作,而对于 3 元素块,您执行 n/2 = n/3 + n/9 + n/27 + n/81 + ... median-of-3 操作。由于每个 5 的中位数是 6 次比较,每个 3 的中位数是 2 次比较,这导致使用中位数为 5 的3*n/2 比较和使用中位数为 3 的n 比较。
谁能解释这种差异,以及使用 5 元素块的动机是什么?我不熟悉应用这些算法的通常做法,所以也许有一些方法可以减少一些步骤,并且仍然“足够接近”中位数以确保良好的枢轴,并且这种方法更适用于 5 元素块?
【问题讨论】:
-
任何大于 3 的块都保证线性时间。偶数大小听起来可能是个糟糕的选择,但您选择了除中位数以外的其他排名(因此无论枢轴是否小于或大于您正在搜索的排名,最坏的情况下都会丢弃相同的大小)。跨度>
-
我很想看看为什么大小为 2 和 3 的块不是线性的真实证据。如果
a+b < 1,我们可以推断T(n) = T(an) + T(bn) + O(n)是线性的,但是我不知道如何证明相反的。
标签: algorithm language-agnostic sorting quicksort median