我需要一个可以处理这些需求的数据结构: *检索O(lg(n))中的最小值 *以O(lg(n))检索最大值 *在O(lg(n))
中向数据结构插入一个值对于max和insert-我认为最大二进制堆可以处理这个,但是它不适用于min,因为最小值可以在每个叶子中大约n / 2个值 - 换句话说O (n)?如果我错了,请告诉我。
如果有人能帮我找到满足这些要求所需的数据结构,我也会非常高兴。
非常感谢
答案 0 :(得分:3)
Min-max heap正是您要找的。 p>
答案 1 :(得分:2)
您可以使用平衡二叉搜索树来执行此操作。在平衡的BST中插入值只需要O(log n)时间,您可以通过分别查找树中最左侧和最右侧的节点来读取最小值或最大值。
或者,您可以查找双端优先级队列的各种实现,这在这里也可能有所帮助。它们比平衡的BST更复杂,并且大多数语言不附带库,但它们更适合您的需求。
希望这有帮助!
答案 2 :(得分:1)
另一个选项是skip list,它将在O(1)中给出最小值,在O(log n)中插入,并在O(log n)中获得最大值。
答案 3 :(得分:0)
您正在寻找AVL树!
它基本上是一个BST,但通过执行名为rotation
的操作来保持平衡。一直保持平衡,树的高度将是lg(n),因此最多搜索max和min需要O(height) = O(lgn)
,并且插入也需要O(lgn)时间。
看看this lecture,它非常清楚地解释了AVL树如何工作,如何维护以及如何花费我上面提到的时间。你也可以谷歌搜索AVL树了解更多信息。