相关疑难解决方法(0)

heapq.nlargest如何工作?

我正在看这个pycon谈话,34:30,发言人说,获取t元素列表中最大的n元素可以完成O(t + n).

怎么可能?我的理解是创建堆将是O(n),但nlargest它本身的复杂性是它O(n + t)还是O(t)(以及实际算法是什么)?

python algorithm heap time-complexity

18
推荐指数
2
解决办法
6149
查看次数

在O(K*log(K))中打印给定堆中最大的K元素?

鉴于以下问题,我不能完全确定我目前的解决方案:

题 :

给定n存储在数组中的元素的最大堆A,是否可以打印所有最大的K元素O(K*log(K))

我的回答:

是的,因为搜索元素需要O(log(K)),因此这样做

K元素将需要 O(K * log(K))运行时间.

algorithm heap tree big-o search

13
推荐指数
4
解决办法
1万
查看次数

Frederickson的堆选择算法的简单解释

是否有任何关于Frederickson的堆选择算法的简单解释,以便在网上任何地方可用的最小堆中找到O(k)时间中的第k个排序元素?如果没有,任何人都可以解释算法的直觉吗?

algorithm heap min-heap data-structures

5
推荐指数
1
解决办法
1081
查看次数

在 2 个最大堆的并集中查找第 k 个最大元素

这个问题来自采访:

假设第 k 个元素出现在两个堆中,则在 2 个最大堆的并集中查找第 k 个最大元素,时间复杂度为 O(k log n)。

这是我想出的算法:

While k is not zero
 if(root of max-heap #1 > root of max-heap #2)
 {
    extract-max(heap #1)
 }
 else if(root of max-heap #1 < root of max-heap #2)
 {
    extract-max(heap #2)
 }
 else //case of duplicates
 {
    extract-max(heap #1)
    extract-max(heap #2)
 }
 k--
Run Code Online (Sandbox Code Playgroud)

因此,当 k = 0 时,extract-max 函数将提取第 k 大的值。

我认为该算法将在 O(k log n) 时间内运行,因为 extract-max 操作将在 O(log n) 中运行,并且我执行了 k 次。

这是正确的方法吗?看来我没有使用给定的信息“这个第k个元素出现在两个堆中”?有没有更好的方法利用这些信息?

algorithm heap data-structures

5
推荐指数
1
解决办法
605
查看次数