如何对amxn矩阵进行排序,其中m行的所有排序和n列排序?

Ani*_*tti 17 algorithm data-structures

给定具有m行和n列的矩阵,每个列都被排序.如何有效地整理整个矩阵?

我知道一个在O(mn log(min(m,n))中运行的解决方案.我正在寻找更好的解决方案.

我知道的方法一次基本上需要2行/列并应用合并操作.

这是一个例子:

[[1,4,7,10],

 [2,5,8,11],

 [3,6,9,12]]
Run Code Online (Sandbox Code Playgroud)

是输入martix,它对每一行和每列进行排序.

预期产出是:

[1,2,3,4,5,6,7,8,9,10,11,12]
Run Code Online (Sandbox Code Playgroud)

另一个例子:

[[1, 2, 3, 3, 4, 5, 6, 6, 7, 7],

 [1, 2, 4, 6, 7, 7, 8, 8, 9,10],

 [3, 3, 4, 8, 8, 9,10,11,11,12],

 [3, 3, 5, 8, 8, 9,12,12,13,14]]
Run Code Online (Sandbox Code Playgroud)

Gar*_*ees 47

我认为你不能比Ω(mn log(min(m,n))更快地完成它,至少在一般情况下不是这样.

假设(不失一般性)m < n.然后你的矩阵看起来像这样:

按行和列排序的矩阵

每个圆圈是一个矩阵条目,每个箭头表示一个已知的顺序关系(箭头源处的条目小于箭头目的地的条目).

要对矩阵进行排序,我们必须解决所有未知的顺序关系,其中一些显示在灰色框中:

订单关系仍有待解决

对所有这些框进行排序需要:

ķ < Ω(ķ日志ķ)+(ñ - + 1)Ω(日志)

= 2Ω( ²日志)+(ñ - + 1)Ω(日志)

=Ω(mn log m)

  • 这个答案是对的.查看第一个矩阵中的7和6. (3认同)