繁体   English   中英

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

[英]Finding the kth largest element using a min-heap

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

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

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

  3. 从剩余的nk元素中查看一个新元素。

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

  5. 那么S将有一个新的最小元素。

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

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

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

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

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

希望这可以帮助!

暂无
暂无

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

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