如何使用许多重复元素加速Quickselect?

时间:2015-05-04 16:42:26

标签: algorithm search partitioning

我目前正在实施Quickselect Algorithm以获取列表中最好的n个元素。 在这种情况下,“最佳”元素是最大的元素。

我的问题如下:
我发现这在许多重复元素的情况下表现不佳,因为最后未排序的值将全部相同,并且在该点,左边界在每次迭代时仅增加1,而不管枢轴索引如何

有没有办法解决这个问题并在这种情况下中止?

1 个答案:

答案 0 :(得分:2)

Quickselect基于Quicksort算法。

根据Quicksort complexity when all the elements are same?,当所有元素相等时,Quicksort可以达到最坏情况下的时间复杂度。

该链接还提供了解决方案[1]如何加速Quicksort。由于Quickselect基于Quicksort,类似的解决方案可能对您有所帮助。

  • [1]解决方案提到了分区的想法。 CS.SE有一些问题包括代码并比较Quicksort的2个分区算法,即 Lomuto 建议的方法和 Hoare CS.SE: Quicksort Partitioning Hoare vs Lomuto建议的方法。
    明确的答案还指出Hoare的变体更有效,而Lomuto的更容易正确实现。因此,根据您的情况,后者可能就足够了。

  • [2] QuickSort and Hoare Partition