围绕对角线对矩阵元素进行排序

时间:2018-10-10 08:46:14

标签: algorithm sorting matrix

我正在寻找一种算法,该算法可以对矩阵的行进行排序,以使元素围绕对角线累积。 我将有一个仅包含值0和1的方阵(大约80行/列)。有些算法对行进行排序的方式是,大多数值为1的元素都位于对角线以下。 我需要一种算法,以尽量减少元素到对角线的平均距离。 像这样: 来自:

0 1 0
1 0 1
1 1 0

收件人:

1 1 0
0 1 0
1 0 1

由于我对该主题不熟悉,所以希望有人可以帮助我。我不是在寻找完整的解决方案。这种算法的名称(如果存在)或伪代码就足够了。

非常感谢!

1 个答案:

答案 0 :(得分:2)

也许有一种更有效的方法,但是您可以将此问题视为assignment problem(尝试将每一行分配给对角线元素)。

这可以通过三个步骤完成:

1)创建一个新矩阵M,其中每个条目M(i,j)包含将输入矩阵的行i分配给对角元素j的成本。对于您的示例,此矩阵如下(到对角线元素的平均距离):

1   0   1
1   1   1
1  0.5 1.5

示例:M(0,0) = 1是将输入矩阵(0 1 0)的行0分配给位于0的对角线元素时的平均距离。

2)运行算法以找到最佳分配(例如hungarian algorithm)。这将为您提供行与列之间的最佳1:1匹配,从而最大程度地减少矩阵中的成本总和。

The result will be the elements (0,1), (1,2) and (2,0)

3)使用此知识重新排列您的输入矩阵。所以

row 0 -> row 1
row 1 -> row 2
row 2 -> row 0