首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >堆插入,删除k个元素

堆插入,删除k个元素
EN

Stack Overflow用户
提问于 2010-11-01 03:26:54
回答 2查看 2.8K关注 0票数 1

我有以下问题(我认为这是众所周知的/标准的),我正在思考:

验证在二进制最小堆中列出k个最小元素是否为O(k)。

我在考虑在BFS中遍历大的最小堆,维护一个最小堆而不是简单的队列。最初,辅助min-heap包含我的大min-heap的根。在每一步,我提取最小值并添加它的所有子元素(最大值2)。在辅助min-heap上执行k次提取-min之后,算法停止。辅助min-heap的大小为O(k) (对于提取的每个min-key,我插入其子项,最大值为2)。

问题是extract-min的复杂度为O(log ),因此该算法的复杂度为O( k )。我必须在O(k)中找到一个。

你有什么想法/论文可以让我用吗?

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-11-02 00:40:57

我想我找到解决方案了。在每个步骤中,我不执行extract-min,而是执行increase-key。我搜索了一个数据结构,它的增量键、插入键和get-min的最坏情况时间为O(1),我找到了。

有关更多信息,您可以查看Fibonacci heap,因为Brodal队列基于斐波那契堆开发的概念。

因此,在每个步骤中,我都有以下操作序列:

get堆min=get-min(辅助堆)get

  • (v1,v2)是v1)

  • insert(Auxiliary堆,,
  1. ,v2的子堆)

这4种操作中的每一种都具有O(1)最坏情况的复杂度。

票数 0
EN

Stack Overflow用户

发布于 2010-11-01 04:41:08

在谷歌上搜索“堆选择算法”,我偶然发现了“Frederickson的堆选择算法”,它指向this paper (27页...)。

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

https://stackoverflow.com/questions/4064715

复制
相关文章

相似问题

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