我知道我们可以使用“锦标赛”算法在大小为N的数组中找到第二大的元素,并在N+log(N)-2的时间内完成。现在我想知道是否可以使用类似的“锦标赛”方法找到第k大的元素。
我知道有一个O(N)的“选择”算法可以找到第k大的元素。它使用带有“好”枢轴的快速选择,在O(N)时间内可以找到。我们也可以在O(N)时间内从数组中构建一个堆,并从堆中检索第k个元素。
我想知道是否还有其他方法。
我知道有一个O(N)的“选择”算法可以找到第k大的元素。它使用带有“好”枢轴的快速选择,在O(N)时间内可以找到。我们也可以在O(N)时间内从数组中构建一个堆,并从堆中检索第k个元素。
我想知道是否还有其他方法。
O(n + k log n)
等于O(n)
:) 这不是作业,只是我的好奇心。 - MichaelO(n)
,如果k
是常数,那么是的,但是例如如果k=n/2,它将是O(n logn),远非您提到的线性O
(如果它是O(n),那么人们肯定不会发明选择算法)。 - Saeed Amiri