一尘不染

中位数选择的最佳中位数-3个元素块还是5个元素块?

algorithm

我正在基于Select算法的快速排序变体实现方式,以选择一个好的枢轴元素。传统观点似乎是将数组分成5个元素的块,取每个块的中位数,然后对所得的中位数递归地应用相同的阻塞方法,以获得“中位数的中位数”。

使我困惑的是选择5元素块而不是3元素块。在我看来,使用5个元素的块执行n/4 = n/5 + n/25 + n/125 + n/625 + ...5个中值的运算,而使用3个元素的块则执行n/2 = n/3 + n/9 + n/27 + n/81 + ...3个中值的运算。由于每个5位数的中位数是6个比较,而每个3位数的中位数是2个比较,因此3*n/2使用5
n位数的中间值和使用3位数的中间值进行比较。

谁能解释这种差异,使用五元素块的动机是什么?我对应用这些算法的惯常做法并不熟悉,因此也许您可以采取一些方法削减一些步骤,并且仍然与中间值“足够接近”以确保有一个很好的枢轴,并且这种方法在5元素块的情况下效果更好?


阅读 254

收藏
2020-07-28

共1个答案

一尘不染

原因是,通过选择3的块,我们可能会失去使用O(n)时间算法的保证。

对于5个块,时间复杂度为

T(n)= T(n / 5)+ T(7n / 10)+ O(n)

对于3块,结果是

T(n)= T(n / 3)+ T(2n / 3)+ O(n)

检查一下:http :
//www.cs.berkeley.edu/~luca/w4231/fall99/slides/l3.pdf

2020-07-28