首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在平衡的二叉树中保持最小和最大的O(1)时间,而不使用指针?

如何在平衡的二叉树中保持最小和最大的O(1)时间,而不使用指针?
EN

Stack Overflow用户
提问于 2012-03-07 13:59:37
回答 5查看 4.9K关注 0票数 6

“算法设计手册”中的3-7部分写道:

假设您可以访问平衡的字典数据结构,该结构支持O(log )时间内的每个操作搜索、插入、删除、最小、最大、后继和前任操作。解释如何修改insert和delete操作,以便它们仍然需要O(log ),但现在最小和最大占用O(1)时间。(提示:考虑使用抽象字典操作,而不是使用指针之类的。)

没有暗示,我认为这个问题相当容易。

这是我的解决方案:

对于树,我只维护一个指针min总是指向最小,另一个指针最大值总是指向最大值。

当插入x时,我只是比较min.key和x.key,if min.key > x.key, then min = x;,如果有必要的话,也可以对max进行比较。

删除x时,if min==x, then min = successor(x); if max==x, then max = predecessor(x);

但暗示说我不能胡搞指南针之类的东西。我的解决方案有指针吗?

如果我们不能使用额外的分数,我如何才能得到O(1)的最小和最大?

谢谢

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-03-07 16:19:34

您的答案与我给出的答案相同--您不是在乱搞指针,而是存储min/max值。

所以,只需更加自信:)

票数 1
EN

Stack Overflow用户

发布于 2012-03-07 15:09:06

您可以通过使用Max堆实现log(N)更新/删除时间和获取最小/最大值的恒定时间

票数 1
EN

Stack Overflow用户

发布于 2012-03-07 14:04:32

我不认为你能得到O(1)的最大值和最小值。

不管怎样,这本书想让你自己去发现二进制堆。如果你想自己做的话,不要看链接。只需考虑以下提示:“树的根始终包含最小值”(如果希望“最大值”为O(1),则为最大值)。

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

https://stackoverflow.com/questions/9602848

复制
相关文章

相似问题

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