【发布时间】:2015-07-14 03:29:15
【问题描述】:
我目前正在实施Quickselect Algorithm 以获得列表中最好的 n 个元素。 在这种情况下,“最佳”元素是最大的。
我的问题如下:
我发现这在许多重复元素的情况下性能很差,因为最后未排序的值都是相同的,此时左边框在每次迭代时只会增加 1,而与枢轴索引无关.
有什么办法可以解决这个问题并在这种情况下中止吗?
【问题讨论】:
-
另请注意,当您选择少于 1% 的项目时,使用堆的替代选择方法将比 QuickSelect 更快。有关详细信息,请参阅blog.mischel.com/2011/10/25/when-theory-meets-practice。例如,如果您要从数百万个列表中选择前 1000 个项目,则使用堆选择算法。
-
做一个三向分区而不是二向分区 - 选择一个枢轴,然后分区成更小、等于和更大的元素。
标签: algorithm search partitioning