我们有一个n x m矩阵,其行被排序,我们需要按升序打印矩阵中的数字。列不是必需的。我想到的解决方案是简单地合并矩阵中的行,将它们视为单独的列表(基本上是合并排序中的合并步骤),在合并排序中需要O(n)。我想知道在这种情况下合并n个独立数组的复杂性是多少。我以为它会是O(n x m),但我不确定。
此外,以升序打印数字的更好方法是什么?一次合并n个列表或一次合并2个列表,直到我们考虑所有行?
谢谢!
答案 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 steps
和complexity 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)
。