在最小堆中搜索最大值

时间:2017-10-07 02:03:33

标签: java data-structures max heap min-heap

我是新手,并试图了解堆是如何工作的。你如何找出最小堆中的最大值?我知道可以通过查找根来找到最小值,但是最小堆中的最大值呢?不寻找代码,更多的是理论和理解。

3 个答案:

答案 0 :(得分:2)

如图所示,很容易指出min-heap中的最大值。 在最小堆中,由于最小堆的规则,最大值将始终位于树的底部附近。父节点的值小于其子节点的值。因此,非常重要的是要记住最大值因此而没有任何孩子。

让我们说你得到了一个小堆。

          2 

     3        7 

  6    4   10   15 

12 14 9 8

在这个min-heap中只是通过非常明显地看出15是最大值,因为你只需要查看没有子节点且处于最小堆中的元素12,14,9,8,15。

答案 1 :(得分:1)

这只是一个技巧,可能比您需要的时间长一些,但如果您的堆包含数字,您可以这样做:

  • 取消原始堆中的数字
  • 对这些运行Min-Heapify。这将导致最小的数字(当再次否定时更大)上升到根。

答案 2 :(得分:1)

min-heap的目的是让你在O(1)时间内找到最小元素(后面是堆积其余堆的O(Log n))。可以在O(1)中查找最小值和最大值,但仅使用增强数据结构。

但是,如果你坚持在min-heap中找到max元素,你可以通过提取min-heap的所有元素来做到这一点。从该最小堆中提取的最后一个元素将是最大元素。获得最大元素所需的时间将由O(n * Log n)限制。这个时间复杂度很容易导出 - 简单地记录n总计n次,