繁体   English   中英

是否有任何算法可以在 O(log n) 时间内找到最大堆中的第 k 个最小元素?

[英]Is there any algorithm to find the kth smallest element in a max-heap in O(log n) time?

在最坏的情况下,第 k 个最小的元素可能位于最大堆的最后一层。在这种情况下,找到该元素所需的时间可能为 O(n),因为在最坏的情况下可能有 n/2 个元素在堆的最后一层。 或者有没有其他算法可以在 O(logn) 时间内找到 MAX 堆中的第 k 个最小元素?

n = 没有。 堆中的元素

是的。 你可以在 O(k log n) 中做到这一点。 为了解释该过程,请考虑一个示例数组[30,20,10,9,7,5]

堆结构由下式给出:

最大堆

现在,我们有以下模式。

  • 第 1 个最小元素 -> 第 6 个最大元素
  • 第 2 个最小元素 -> 第 5 个最大元素
  • 第 3 个最小元素 -> 第 4 个最大元素
  • ..
  • ..
  • ..
  • 第 k 个最小元素 -> 第 (n-k+1) 个最大元素

例如,在我们的示例中,第 5 个最小元素 -> 第 2 个最大元素 -> 20

暂无
暂无

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

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