Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 访问接近最高值的项目的最佳数据结构?_Algorithm_Sorting_Search_Tree_Heap - Fatal编程技术网

Algorithm 访问接近最高值的项目的最佳数据结构?

Algorithm 访问接近最高值的项目的最佳数据结构?,algorithm,sorting,search,tree,heap,Algorithm,Sorting,Search,Tree,Heap,我正在做一件我必须储存大量物品的事情(大约几千件) 项目将以高频率插入、删除和访问;但是,项的值越大,插入、删除或访问该项的可能性就越大 此外,我想支持对结构中的第一个“k”项进行非常快速的排序,其中“k”相当小 因此,理想情况下,进行这些操作的成本将与它们的价值直接相关 一个简单的旧链表,其中项目总是保持排序将是这里的天真方法,但性能在所有情况下仍然是重要的;在一般情况下,我希望操作比O(n)更好 在这个问题上,我已经进行了不少头脑风暴,我被难住了 我起初认为a可能是理想的数据结构,但搜索并不

我正在做一件我必须储存大量物品的事情(大约几千件)

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

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

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

一个简单的旧链表,其中项目总是保持排序将是这里的天真方法,但性能在所有情况下仍然是重要的;在一般情况下,我希望操作比O(n)更好

在这个问题上,我已经进行了不少头脑风暴,我被难住了

我起初认为a可能是理想的数据结构,但搜索并不偏向beap的顶部;相反,他们从底角开始,一路向上。不是我需要的

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

我需要的是一个左右翻转的二叉搜索树,这样我就可以从右下角开始遍历。但我正试着用我的头脑去思考它是否对我有用。我认为它将提供O(2 logn)最坏情况下的性能,对于更大的值,它将比O(logn)更好。。。但我不完全确定


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

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

元素应按降序存储。此外,还应修改搜索操作,以便在底部列表中的head元素处开始搜索(与正常跳过列表不同,不在顶部列表中)


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

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

散列?我想我忘了提到,我还需要对数据集进行部分排序,深度为k(其中k是几十个项目的顺序)。散列不适合排序…那么请编辑您的问题。因为这个问题需要不同的解决方案。但是,在我的特殊情况下,列表前面的高级节点是否会过多,因为前面会经历更多的插入和删除?@user1274193:根本不会。较高级别的节点均匀分布在列表中,因为节点级别不取决于插入/删除的数量,它只取决于创建节点时生成的随机数。