我们有一个n x m矩阵,其行已排序,我们需要按升序打印矩阵中的数字。列不必排序。我想到的解决方案是简单地将矩阵中的行合并为单独的列表(基本上是合并排序中的合并步骤),合并排序中的行需要O(n)。我想知道在这种情况下合并n个单独的数组的复杂性是什么。我以为会是O(n x m),但我不确定。
另外,将数字升序打印的更好方法是什么?一次合并n个列表,还是一次合并2个列表,直到我们考虑所有行?
谢谢!
最佳答案
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 steps
和complexity would be O(N*M)
。更好的方法(分治技术):
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.
关于sorting - 从n x m数组中按升序打印数字,其行已排序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13410763/