繁体   English   中英

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

[英]Max heap vs Min heap for kth smallest element

我无法理解为什么找到第k个最小元素的解决方案使用Max堆方法。 对于第k个最大元素,一个最小堆方法。 使用min heap来找到第k个最小元素是不是更有意义,因为最小的元素总是root? 因此,如果我们想要找到第3个最小的元素,那么我们只删除根2次,构建堆,然后我们得到第3个最小的元素。 在最大堆中,最小的不在根,所以为什么使用它更好? 对于数组中的升序或降序排序也是如此。 我看到大多数人使用最大堆来提升。

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

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

要么

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

暂无
暂无

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

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