使用min-heap查找第k个最大元素

时间:2013-01-12 21:01:14

标签: algorithm sorting data-structures heap min-heap

我有一个关于使用min-heap查找第k个最大元素的问题。算法如下:

  1. 我们采用前k个元素并构建一个minheap

  2. 设Sk是S中的最小元素。

  3. 从剩余的n-k元素中查看一个新元素。

  4. 如果新元素大于Sk,则在S中替换它,并重新排序堆。

  5. S然后会有一个新的最小元素。

  6. 在查看所有其他元素之后,Sk就是答案

  7. 我不明白这个算法。例如,让数字为1,2,3,4。我们想要找到第4个最大值,即4个。但是当我们使用算法时,我们采用前4个元素,构建minheap,Sk为1。

    我做错了什么?如果有人可以帮忙,我将不胜感激。感谢

1 个答案:

答案 0 :(得分:4)

我认为你的术语混淆了。序列1,2,3,4中最大的元素是数字4.第二大元素是3,第三大元素是2,第四大元素是1.由于算法返回1,它可以正常工作

但是,4是序列中的第k个最小元素。如果要查找第k个最小元素,可以将最小堆与最大堆交换,并对算法进行适当的调整。

希望这有帮助!