【发布时间】:2019-08-16 14:06:16
【问题描述】:
我有一个集合,但我还不知道要使用哪种数据结构。 我有两个函数,添加和删除。
这两个函数都需要具有相似的复杂性,因为它们都被频繁使用。
要么添加函数很简单,因为 O(1) 和 removeMax 将是 O(log n) 或者两者都是 o(1) 或者其中一个是 log n 和另一个 o(n)。
removeMax 应该移除最大值并返回它,并且应该能够多次使用它,所以下次你调用它时它会移除下一个新的最大值。
有没有办法同时使用 O(1) 或至少 log n 来删除?
【问题讨论】:
-
该集合大概是并且必须是未排序的?
-
@Michael 是的,它是未排序的,随机的
-
您在寻找斐波那契堆(或其他类型的最大堆)吗? en.wikipedia.org/wiki/Fibonacci_heap - O(1) 插入,O(logn) 删除(当然摊销)
-
看看最小-最大堆。我相信优先级队列在内部使用其中之一。
-
Maybe useful,关于@OndraK 的评论。
标签: java collections time-complexity