获取第k个元素的最佳数据结构和算法

时间:2018-10-30 12:16:13

标签: algorithm data-structures

我得到了一组n个元素。 是否有一个构建时间(预处理)为O(n)的数据结构。 从那以后可以回答查询以获取O(k)中的第k个最大元素? 有什么比O(k)好吗?

1 个答案:

答案 0 :(得分:3)

在第O(n)个构建时间和第{k个最大元素的搜索时间O(k log k)处添加我的注释。

预处理只是建立一个堆h,可以在O(n)中完成

然后,在查询期间,您必须使用其他优先级队列q,其中元素按值排序(降序)。该算法的工作原理如下:

  • 首先将h的根节点放入q

  • 现在重复k次:移除q的头并将该元素的子元素(根据h)放入q

  • 最后一个被删除的元素是您的第k个最大元素

q(本身是堆)中删除元素是O(| q |)。在每一步中,q将增长1个元素。经过k-1个步骤后,其大小将为k。因此,该算法在 O(k log k)

中运行