从行排序的n x m数组按升序打印数字

时间:2012-11-16 05:01:03

标签: sorting matrix merge complexity-theory

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

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

谢谢!

1 个答案:

答案 0 :(得分: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 包含M个元素。

如果喜欢(线性合并):

  • 首先合并两行 - 您将获得中间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);第(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.