【问题标题】:print numbers in ascending order from an n x m array whose rows are sorted从行已排序的 n x m 数组中按升序打印数字
【发布时间】:2012-11-04 20:01:39
【问题描述】:

我们有一个 n x m 矩阵,其行已排序,我们需要按升序打印矩阵中的数字。列不必排序。我想到的解决方案是简单地合并矩阵中的行,将它们视为单独的列表(基本上是合并排序中的合并步骤),在合并排序中需要 O(n)。我想知道在这种情况下合并 n 个单独的数组的复杂性是什么。我以为会是 O(n x m),但我不确定。

另外,按升序打印数字的更好方法是什么?一次合并 n 个列表还是一次合并 2 个列表,直到我们考虑所有行?

谢谢!

【问题讨论】:

    标签: sorting matrix merge complexity-theory


    【解决方案1】:

    What would be complexity? Its all depends how do you merge N arrays of M size!

    合并的复杂性:

    • 合并两个排序的M 大小数组按顺序进行。所以这一步的复杂度是O(2M)。

    对于 N rows,其中 each row is sorted包含 Melements。

    如果这样做(线性合并):

    • 首先合并两行——你会得到中间的2M size sorted array
    • 2M array 与另一个row of N size matix 合并——你会得到3M size sorted array

    以这种方式合并takes N stepscomplexity would be O(N*M)

    更好的方法(分治法):

    • 首先合并所有两个连续行的对 (1,2), (3,4) 这给你 N/2 对 2M 大小。在下一步中成对合并。如下所述。

    • 首先制作一对两行和merge all N/2 pairs first and merge them
      例如对行(1,2);行(3,4); row(5,6) ......你会得到= N/2 pairs each of 2M size

    • 现在在下一步中,make pair of two merged arrays each of size 2M from previous step 然后合并它们--您将get N/4 sorted array of 4M size.((将 2M 与其他 2M 数组合并 -> 4M,复杂度为 O(2M + 2M) = O(4M))

    逐步合并所有这些中间sorted arrays util you gets a single sorted array of size N*M。这个时间复杂度将是 M*N*log(N) 总计steps required is log(N)

    推荐大家学习merge-sort and its complexity.

    【讨论】:

    • 这是不正确的。数据集大小为M*N。数据是M 长度为N 的排序序列。自然归并排序的复杂度(即具有排序序列的排序)是O(M*N)
    • 你说不通。请用通俗易懂的方式表达自己
    • 我真的做错了吗?! ..我的要求请多解释一下,以便我理解。
    • 帮助我,以便我们提供正确的解决方案。我想我无法正确理解您的第一条评论。
    • 二维数组可以排列成一维数组,由长度为NM排序序列组成。自然归并排序利用这些排序序列,从而将一般情况复杂度 (O(MNlogMN)) 提高到 O(MN)
    猜你喜欢
    • 1970-01-01
    • 2016-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-04
    相关资源
    最近更新 更多