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