我急需一种数据结构,可以进行大量插入和删除(数量可能相当),并且可以非常快速地查找最高(或最低)值。删除操作总是只影响最高(或最低)值。问题在于这些值必须被排序,并且在任何时刻我都可以插入一个元素到其他两个元素之间的任意位置。我想要快速读取(和删除)的唯一值是最大值(或最小值)。请问你有什么建议吗?请对您提出的答案进行算法复杂度分析。
看起来你需要一个最大堆。
支持O(log n)插入,O(1)查找最大值和O(log n)删除最大值。
这种数据结构被称为自平衡二叉搜索树,在我使用的每种语言中都有实现,除了Borland Pascal。
你提到的所有操作(添加/删除/查找)的成本都是O(logn)
。最小-最大查找也可以是O(1)
。
你可以按排序顺序遍历所有元素,时间复杂度为O(n)
。
编辑
我不建议使用堆,因为它不能满足“必须排序”的要求。
如果你只需要插入/删除/查找最大值,那么我建议使用排序数组或链表。最大插入/删除/查找O(1)
,并且所有元素已经排序。
O(1)
中进行最小值-最大值查找?我认为你需要做一些调整..(在AVL、RB-Tree等数据结构中),例如让一个节点指向Min / Max,.. - Oscar Mederos