查找O(n)时间中的n个最大条目

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了查找O(n)时间中的n个最大条目相关的知识,希望对你有一定的参考价值。

是否有一种方法可以在O(n)时间中找到具有n个元素的数组中的对数n个最大元素?

我将创建一个基于数组的HeapPriorityQueue,因为如果所有元素都可用,则可以使用自下而上的堆构造在O(n)时间内创建堆。然后,删除此优先级队列的第一个元素应该在O(1)中,时间是否是't?

答案

然后删除此优先级队列的第一个元素应该在O(1)时间为`t?]中>

这将是O(logn),因为您还将删除第一个元素。看着它而不删除是O(1)。重复此清除logn次将是O(log^2(n)),它仍然在O(n)中,因此此解决方案确实可以满足要求。

另一种选择是使用selection algorithm直接查找第log(n)个最大元素,也将是O(n)

另一答案

基本上,是的。堆的创建占用O(n),这支配了算法。

以上是关于查找O(n)时间中的n个最大条目的主要内容,如果未能解决你的问题,请参考以下文章

查找算法总结—顺序二分二叉红黑

查找算法总结—顺序二分二叉红黑

在 O(n) 时间内找到数组中的 10 个最大整数

在 Python 中查找逗号分隔列表中的第 N 个项目

如何在 scikit-learn 中的 tfidf 之后查看术语文档矩阵的前 n 个条目

如何对文本文件进行排序以在 O(MN) 时间复杂度中查找字谜,其中 M 是最大字符数,N 是单词数?