【发布时间】:2016-07-14 11:09:03
【问题描述】:
问题如下: 有 k 个长度为 n/k 的排序列表(我们假设 k 除以 n)。 我需要找到一种算法,将这些列表合并到一个长度为 n 的列表中 运行时间复杂度为 O(k + nlogk)。
我正在考虑按情侣合并列表, 而不是由夫妻再次合并合并的列表,依此类推,当我到达一个长度为 n 的排序列表时我停止了。
当我计算我的算法的时间复杂度时,我得到了 O(nlogk),它比所需的时间更短。
我想知道我的方式是否错误。 感谢您的帮助!
【问题讨论】:
-
解释你是如何得到这个结果的。
-
在每次迭代中,合并列表需要 O(n),并且我们有 log k 次迭代。 @KarolyHorvath
-
假设k
-
O(n log k) 对我来说听起来不错。由于它更小,它也是 O(k + n log k)。所以我会说任务解决了。
-
@Codor 见我的评论。通过一次“迭代”,OP 意味着将所有当前列表合并到该数字的一半。 IE。如果从 8 个列表开始,则在第一次迭代中将它们合并为 4,在第二次迭代中合并到 2,最后合并到 1。在每次迭代中,您必须查看所有 n 个元素,并且有 logk 次迭代,因此 O(nlogk)。 +k 可能来自选择合并的 k-1 对。