【发布时间】:2012-06-22 18:01:37
【问题描述】:
我知道我们可以使用“比赛”algorithm 在N+log(N)-2 中找到大小为N 的数组中第二个 最大的元素。现在我想知道我们是否可以使用类似的“锦标赛”找到第 k-th 个最大的元素。
我知道有一个O(N)“选择”算法可以找到第 k-th 个最大的元素。它使用Quick Select 和一个“好”的枢轴,可以在O(N) 中找到。我们还可以从O(N) 中的数组构建一个heap,并从heap 中检索k 元素。
我想知道是否有另一种方法。
【问题讨论】:
-
使用堆需要 O(n + k log n),而不是 O(n),请问您为什么要寻找其他方法? (这是作业吗?)。
-
@SaeedAmiri
O(n + k log n)正是O(n):) 这不是作业,只是我的好奇心。 -
@Michael,不,不是
O(n),如果k是常数,是的,但例如如果k=n/2 它将是O(n logn) 远离线性O你提到过(如果是 O(n),那么肯定人们不会疯狂地发明选择算法)。 -
@SaeedAmiri 谢谢。你说得对,我现在明白了。
标签: algorithm language-agnostic selection