繁体   English   中英

需要一个有效的选择算法?

[英]Need an efficient selection algorithm?

我正在寻找一种算法,用于选择A [N / 4]元素在未排序的数组A中,其中N是数组A的元素数。我希望算法在次线性时间内进行选择。我有基本的知识像BST等结构? 哪一个对我来说是最好的算法我记得我希望它是最快的,对我来说不应该太难实现。这个N可以变化到250000.任何帮助都将受到高度赞赏。注意数组可以有非独特的元素

正如@Jerry Coffin所提到的,你不能希望在这里得到一个次线性时间算法,除非你愿意预先做一些预处理。 如果您需要针对此问题的线性时间算法,则可以使用quickselect算法 ,该算法在预期的O(n)时间内运行,并且最坏情况为O(n 2 )。 中值中值算法具有最坏情况的O(n)行为,但具有高常数因子。 您可能会发现一种有用的算法是introselect算法,它结合了前两种算法,以获得具有低常数因子的最坏情况O(n)算法。 该算法通常用于在C ++标准库中实现std::nth_element算法。

如果您愿意提前进行一些预处理,可以将所有元素放入订单统计树中 从那时起,您可以在任何k时间O(log n)最坏情况下查找第k个元素。 但是,所需的预处理时间是O(n log n),因此,除非您进行重复查询,否则这不太可能是最佳选择。

希望这可以帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM