访问最高价值附近物品的最佳数据结构?

时间:2013-03-01 03:52:40

标签: algorithm sorting search tree heap

我正在做一些我必须存储相当多项目的事情(大约几千个)。

将以高频率插入,删除和访问项目;但是,项目的值越大,插入,删除或访问的可能性就越大。

此外,我想支持非常快速地对结构中的第一个“k”项进行排序,其中“k”相当小。

因此,理想情况下,执行这些操作的成本将与其价值直接相关。

一个简单的旧链接列表,其中项目始终保持排序将是这里的天真方法,但在所有情况下的性能仍然很重要;理想情况下,在一般情况下,操作要优于O(n)。

我在这个问题上已经集思广益了,我很难过。

我一开始认为Beap可能是理想的数据结构,但搜索不会偏向于顶部;他们反而从一个角落开始向上和向上工作。不是我需要的。

某种风格的二元搜索树似乎不是正确的解决方案,因为虽然这些操作是O(log n)但我希望对更大的值做得更好。

我需要的是几乎是一个翻转的二叉搜索树,这样我就可以从右下角开始遍历了。但是我试图绕过它,看看它是否适合我。我认为它会提供O(2 log n)最坏情况的性能,并且对于更大的值,优于O(log n)......但我不完全确定。

是否有这样的数据结构?或者我必须发明一个?

2 个答案:

答案 0 :(得分:1)

如果概率数据结构可以接受,请使用(稍加修改)Skip list

元素应按递减顺序存储。还应修改搜索操作以在底部列表中的head元素处开始搜索(不在正常跳过列表的顶部列表中)。

插入/删除/搜索操作的预期时间是O(log K),其中K是大于插入/删除/搜索的元素的数量。最坏的情况时间复杂度是O(K)。

答案 1 :(得分:0)

为什么不能使用heaps?它们将最大的物品存储在靠近顶部的位置,并支持次线性时间内的所有操作。此外,显然基于堆的heapsort允许非常快速地对数组进行部分排序(占用前N个元素)。