Python中heapq.merge的时间复杂度是多少?

时间:2019-02-18 04:18:40

标签: python time-complexity heapq

我读到heapq.merge函数专门用于合并2个排序的数组?时间复杂度O(n)是多少?如果不是,为什么?还有它的空间复杂性是什么。

我正在解决合并具有2个指针的2个排序数组的问题,并且可以实现O(n)时间复杂度和O(n)空间复杂度。

2 个答案:

答案 0 :(得分:0)

heapq.merge可用于合并任意数量的可迭代对象。它的时间复杂度为O(NlogK),其中N是元素总数,而K是馈入minheap进行比较的项目。

空间复杂度为O(K),因为minheap在执行过程中的任何给定时间点都有K个项目。

答案 1 :(得分:0)

如果您正在合并 K 个已排序数组,并且每个数组有 N 个元素,那么 heapq.merge 将以 NK(logK) 的时间复杂度执行操作。因为 NK 是所有 K 个数组的元素总数,每个元素都必须进行比较。而 logK 是从堆顶(也就是堆的高度)开始冒泡的时间复杂度。

在你的情况下 K=2,log(2) = 1。所以在你的特殊情况下它是 O(n)