我正在做一些我必须存储相当多项目的事情(大约几千个)。
将以高频率插入,删除和访问项目;但是,项目的值越大,插入,删除或访问的可能性就越大。
此外,我想支持非常快速地对结构中的第一个“k”项进行排序,其中“k”相当小。
因此,理想情况下,执行这些操作的成本将与其价值直接相关。
一个简单的旧链接列表,其中项目始终保持排序将是这里的天真方法,但在所有情况下的性能仍然很重要;理想情况下,在一般情况下,操作要优于O(n)。
我在这个问题上已经集思广益了,我很难过。
我一开始认为Beap可能是理想的数据结构,但搜索不会偏向于顶部;他们反而从一个角落开始向上和向上工作。不是我需要的。
某种风格的二元搜索树似乎不是正确的解决方案,因为虽然这些操作是O(log n)但我希望对更大的值做得更好。
我需要的是几乎是一个翻转的二叉搜索树,这样我就可以从右下角开始遍历了。但是我试图绕过它,看看它是否适合我。我认为它会提供O(2 log n)最坏情况的性能,并且对于更大的值,优于O(log n)......但我不完全确定。
是否有这样的数据结构?或者我必须发明一个?