【发布时间】:2013-10-29 16:21:12
【问题描述】:
我正在寻找一种数据结构,它可以确保至少 Log(n) 复杂性以删除和插入节点以及接近 O(1) 或摊销 Log(n) 以搜索最大(或最小值)值.
我正在考虑使用经过修改的自平衡 BST(哪个?)以记住插入的最大值(或最小值)。
有什么建议吗?
抱歉,我必须编辑问题...当然,自平衡 BST 可以允许在 log(n) 中搜索最大值和最小值,但我正在考虑更多关于 O(1) 的内容。
【问题讨论】:
-
任何平衡的 BST 都允许在 O(lg n) 时间内进行最小和最大查询。一直向左/向右走,直到你碰到一个 nil 孩子。
-
您可以构建一个“双端”堆,其中最小值和最大值都准备好在
O(1)时间内进行访问。 -
感谢两位。如果可能的话,我正在寻找比 log(n) 更接近 O(1) 的最大值和最小值,否则我只使用一棵树。关于双端堆,我可以删除 O(lg n) 中的一项吗?
-
是的,大的 Oh 符号当然隐藏了一些开销,但是双堆支持在
O(lg n)时间进行插入和删除。 -
@dukeling,这就是我的想法......但我不确定我是否可以在不搜索的情况下跟踪它