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