简单k阵列合并的复杂性

时间:2015-11-03 16:47:22

标签: arrays algorithm merge time-complexity

在这个问题中,我们在k个排序数组中有n个元素,我们希望将它们合并为1个大小为n的排序数组。

问题的最佳解决方案是在O(nlogk)时间内使用最小堆。 但是我们只想使用合并算法并将它们全部成对合并,直到我们得到输出数组,这会是什么时间复杂度? 如果阵列大小相同或大小不同,这是否重要?

感谢您的回答。

2 个答案:

答案 0 :(得分:0)

Does it matter if the arrays are all the same size or different sizes?

不,它没有。

在每个阶段执行O(N)操作(大约3/2 * N,包括N / 2比较和N个移动 - 每个元素参与比较,并被复制)。还有Log(K)这样的阶段。总体复杂度O(N * Log(K))

答案 1 :(得分:0)

看起来大小确实重要,请告诉我,如果我错了。如果数组的大小为1,2,4,8,16 ...(一个树,其中每个级别是一个排序数组,k = logn),它可以在O(n)时间内完成: - 使用下一个更大的数组(1 + 2)对最小的数组(根)进行合并 - 使用下一个更大的数组(1 + 2 + 4)等结果...等等......

在最后的合并中,我们将进行1 + 2 + 4 + 8 + ... + n / 2比较。 请注意,我们比较每个元素的次数等于它在树中的高度。(假设我们计算叶子的高度= 1)例如,根将比较logn次数,但叶子将只比较一次,We得到它可以在O(n)中完成:

Time Complexity