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

时间:2018-11-07 16:26:15

标签: algorithm heap heapsort min-heap max-heap

我很难理解为什么找到第k个最小元素的解决方案使用Max堆方法。对于第k个最大元素,使用最小堆方法。使用最小堆来查找第k个最小元素是否更有意义,因为最小元素将始终是根?因此,如果要查找第3个最小的元素,则只需删除根两次,构建堆,然后得到第3个最小的元素。在最大堆中,最小不是根,那么为什么更好使用呢?对于数组中的升序或降序排序也是如此。我看到大多数人使用最大堆来提升。

1 个答案:

答案 0 :(得分:0)

实际上,我们可以同时使用Min和Max堆来查找第k个最小元素:

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

  1. 我们可以仅用k个元素构建Max Heap。然后,我们仅将其余元素与根进行比较,仅用比根小的元素替换为根,因此Max Heap始终具有k个最小元素。