algorithm - 第 k 个最小元素的最大堆与最小堆

标签 algorithm heap heapsort min-heap max-heap

我无法理解为什么寻找第 k 个最小元素的解决方案使用最大堆方法。对于第 k 个最大的元素,最小堆方法。使用最小堆来查找第 k 个最小元素不是更有意义吗,因为最小元素总是根元素?所以如果我们想找到第 3 小的元素,那么我们只需删除根节点 2 次,构建堆,然后我们得到第 3 小的元素。在最大堆中,最小的不在根部,那么为什么使用它更好呢?这同样适用于对数组中的数字进行升序或降序排序。我看到大多数人使用最大堆来提升。

最佳答案

其实我们可以同时使用Min堆和Max堆来寻找第k小的元素:

  1. 就像您描述的那样,我们可以构建一个最小堆,然后循环提取第 k 个元素。

  1. 我们可以只用 k 个元素构建最大堆。然后我们只是将其余元素与根进行比较,只用根替换小于根的元素,因此最大堆总是有 k 个最小元素。

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

相关文章:

c - 在 C 中查找 N 个整数中最大整数的数量

c++ - 我试图了解内存分配的工作原理以及发生的时间

java - 堆的搜索函数

sorting - 事件模拟是否需要优先级队列?

algorithm - 比较排序算法在最坏的情况下需要 Ω(nlgn) 比较

c++ - 如何将一个集合分成K个子集,使得子集中的元素之和最小?

java - 塔防中寻路的最佳算法

java - 为什么 z 没有在最小堆中冒泡?

c - 堆排序算法 CLRS

c - 为什么 heapsort 的 C 实现会出现段错误?