【问题标题】:complexity of simple k arrays merge简单 k 数组合并的复杂度
【发布时间】:2016-02-03 22:23:50
【问题描述】:

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

该问题的最佳解决方案是在 O(nlogk) 时间内使用最小堆。 但是假设我们只想使用合并算法并将它们全部合并,直到我们得到输出数组,那么时间复杂度是多少? 数组是相同大小还是不同大小有关系吗?

感谢您的回答。

【问题讨论】:

    标签: arrays algorithm merge time-complexity


    【解决方案1】:

    似乎尺寸确实很重要,如果我错了,请告诉我。如果数组的大小为 1,2,4,8,16...(一棵树,其中每个级别都是一个排序数组,k=logn),它可以在 O(n) 时间内完成: -将最小的数组(根)与下一个更大的数组(1+2)合并 - 将结果与下一个更大的数组 (1+2+4) 合并,依此类推...

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

    Time Complexity

    【讨论】:

      【解决方案2】:

      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))

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-12-12
        • 1970-01-01
        • 1970-01-01
        • 2016-11-19
        • 1970-01-01
        • 1970-01-01
        • 2016-01-13
        • 2013-10-09
        相关资源
        最近更新 更多