【发布时间】:2019-02-18 04:18:40
【问题描述】:
我读到 heapq.merge 函数专门用于合并 2 个排序数组?时间复杂度是 O(n)?如果不是,那是什么,为什么?还有它的空间复杂度是多少。
我正在解决用 2 个指针合并 2 个排序数组的问题,并且可以实现 O(n) 时间复杂度和 O(n) 空间复杂度。
【问题讨论】:
-
我认为是 O(nlogn)。如果列表有 n 个元素,则合并一个元素的复杂度为 O(logn)。要合并所有元素,O 是 nlogn。
-
我认为@Jidnyasa Babar 是正确的,它 heapq.merge 是 O(n) 时间复杂度。只需尝试以下代码你就会明白: from heapq import merge; a = [1,3,4]; b = [10,9,8];打印(列表(合并(a,b)));然后你会得到 [1, 3, 4, 10, 9, 8],merge 只会选择并“弹出”每个数组左侧的当前最小操作,它无助于排序,所以时间复杂度是O(K * X) K是数组的个数,X是每个数组的平均元素个数,我们也可以简化为O(N)
标签: python time-complexity heapq