algorithm - 使用最小堆查找第 k 个最大元素

标签 algorithm sorting data-structures heap min-heap

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

  1. 我们取前 k 个元素并构建一个最小堆

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

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

  4. 如果新元素大于 Sk,则将其替换到 S 中,并对堆重新排序。

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

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

我不明白这个算法。例如,让数字为 1、2、3、4。我们想找到第 4 大的,也就是 4。但是当我们使用算法时,我们取前 4 个元素,构建最小堆,Sk 为 1。

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

最佳答案

我认为您对术语感到困惑。序列 1, 2, 3, 4 中最大的元素是数字 4。第二大元素是 3,第三大元素是 2,第四大元素是 1。由于算法返回 1,因此它可以正常工作.

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

希望这对您有所帮助!

关于algorithm - 使用最小堆查找第 k 个最大元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14297912/

相关文章:

python-3.x - 这个函数的时间复杂度是多少,它生成一个数字的所有唯一因子组合?

c++ - 尾调用优化似乎会稍微降低性能

javascript - 排序并查找距当前时间最近的时间

javascript - d3 包布局的地理排序功能

c++ - 具有所有键的下界和上界迭代的多键映射

c++ - 用于在 C++ 中包装整数的干净、高效的算法

algorithm - 为 n 个数据点中的每一个排序 n-1 个最近的邻居

mysql - 如何将以下信息合并到 1 个 mysql 查询中?

python - 如何打印给定节点的父节点

mysql - 插入MySQL队列的中间