【发布时间】:2019-04-29 19:57:04
【问题描述】:
我正在寻找一种允许以 O(n*log(n)) 复杂度解决特定问题的数据结构。它需要表示一组整数,我可以在其中执行以下操作: - 添加一个元素 - 检查集合中是否存在元素 - 删除每个大于给定整数的值 希望具有对数复杂度。
我寻找链表是因为在中间添加一个元素并删除整个结构的一部分很容易,但我不知道如何保持有序列表或实现二分搜索。起初我正在考虑哈希表,但我不知道如何过滤集合。我正在查看平衡二叉树,但我不知道我是否在寻找妄想的东西,或者它是否以某种方式存在但我找不到它。
【问题讨论】:
-
考虑使用priority queue。
-
@jhill515 优先级队列不允许您在小于线性的时间内检查是否存在。
-
实际上,是的,因为搜索是 O(log(n))。
-
@jhill515 查看离您最近的参考手册。这是我预测你会发现的。优先级队列最常见的实现是堆。堆有时间
O(1)找到最小元素,O(log(n))添加/删除到堆,有时间O(n)在堆中搜索给定元素。 -
理论上可以从具有不同属性的数据结构中构建优先级队列。例如,优先级队列可以由带有少量信息的红黑树构建而成。但现在它执行如你所愿的事实是因为它是一棵红黑树,而不是因为它是一个优先级队列。 (并且对于优先级队列操作,您的平均速度会比堆慢 - 这就是更常用堆的原因。)
标签: algorithm list sorting set structure