我知道有几个问题,但我无法解决我的问题。
问题很简单:合并k n长度排序链表。
有许多答案,使用k长度优先级队列,复杂度为O(n log(k))
不知道如何。以下是链接Merging K- Sorted Lists using Priority Queue
这让我觉得我错了。所以我的解决方案是:
要合并两个n长度列表,我们需要O(2n)时间。
所以时间的复杂性就是。
k / 2 * 2n = k * n
k / 4 * 4n = k * n
k / 2 ^ x * 2 ^ x n = k n
最后一项将是k * n,其中2 ^ x = k或x = log(k)
所以总log(k)次迭代在每次迭代中进行k * n次比较。所以时间复杂度为O(k * n * log(k))
有人可以告诉我哪里错了吗?
感谢您的时间。
答案 0 :(得分:2)
除非另有说明,否则当算法的复杂性以⊥
表示时,N
是输入的大小。因此,当我们“合并k个链表是O(N log k)”时,我们的意思是N是所有列表中元素的总数。
正如您所说,合并k个m长度列表是O(km log k)。这里输入的大小是km(元素的总数),因此这与上面的陈述一致。
但是,你的陈述并不那么强烈,因为它只涵盖了相同长度的k个列表。 “合并k个链表是O(N log k)”是真的无论如何在列表中分配这些N个元素。