首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >求最大2堆中的kth最大元

求最大2堆中的kth最大元
EN

Stack Overflow用户
提问于 2014-05-31 22:25:03
回答 1查看 536关注 0票数 5

这个问题来自于一次采访:

在两个最大堆的联合中找到kth最大元素,假设这个kth元素出现在O(k log n)的两个堆中。

这是我想出的算法:

代码语言:javascript
复制
While k is not zero
 if(root of max-heap #1 > root of max-heap #2)
 {
    extract-max(heap #1)
 }
 else if(root of max-heap #1 < root of max-heap #2)
 {
    extract-max(heap #2)
 }
 else //case of duplicates
 {
    extract-max(heap #1)
    extract-max(heap #2)
 }
 k--

因此,当k=0时,提取-max函数将提取出最大的kth。

我认为该算法将在O(k log n)时间内运行,因为提取-max操作将在O(log n)中运行,并且我执行了k次。

这样做对吗?似乎我没有使用给定的信息“这个kth元素出现在两个堆中”?有没有更好的方法利用这些信息?

EN

回答 1

Stack Overflow用户

发布于 2014-07-23 08:12:26

你的方法很好,不能改进太多。它也有预期的复杂性,所以你应该做得很好。我想到并可以优化的唯一一件事是,在最后一种情况下,只需检查k是否为零:

代码语言:javascript
复制
While true
 if(root of max-heap #1 > root of max-heap #2)
 {
    extract-max(heap #1)
 }
 else if(root of max-heap #1 < root of max-heap #2)
 {
    extract-max(heap #2)
 }
 else //case of duplicates
 {
    extract-max(heap #1)
    extract-max(heap #2)
    if (k == 1) {
      break;
    }
 }
 k--

通过这种方式,您可以减少平均情况下的比较次数(这将产生非常轻微的影响)。这还利用了提供给您的附加信息--元素对于两个堆都是通用的。但是,我不认为任何基准都不会注意到这种改进,因为extract远远超过了比较的复杂性。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23975004

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档