首页 > 解决方案 > 二维数组匹配和重新排序具有约束的矩阵中的整数元素

问题描述

我有以下二维数组/矩阵:

matrix = np.array([[1, 11, 12, 0, 14],
                   [1, 11, 22, 23, 0],
                   [1, 33, 32, 34, 0],
                   [1, 33, 0, 53, 41],
                   [1, 0, 54, 0, 41]
                   ])

如果我必须在第 3 行的上述矩阵中添加数字 11,则可能的结果之一如下:

1   11  12  0   14
1   11  22  23  0
1   11  32  34  33  Moved 33 to column 5, Added 11 to column 3
1   0   41  53  33  Moved 41 to column 3, Moved 33 to column  5 (constraint 1/4)
1   54  41  0   0   Moved 54 to column 2, Moved 41 to column 3 (constraint 1/4)

上述约束如下:

约束 1:如果矩阵中有匹配的数字,则必须将新数字添加到同一列。也就是说,如果我必须在第 3 行的矩阵中添加 11,那么在最终输出中它必须出现在第 2 列中,因为第 1 行和第 2 行已经在第 2 列中有它

约束 2:要在任何行中添加新数字,都会有值为 0 的空单元格,因此如果没有空格,我们需要停止添加数字

约束 3:每一行都有唯一的值

约束 4:如果您从任何行移动或移动一个值并且该值存在于多行中,那么您必须再次将所有值移动到同一列

约束 5:上面的值的添加和移动需要以最小的步骤完成(优化问题)

到目前为止,我使用 Python 语言做了以下事情

  1. 我使用了匹配(在 python 中转换的 R 语言匹配函数)和矩阵的重新排序:它工作(不考虑优化)但是它在其他用例中失败
matrix = np.array([[1, 11, 12, 0, 14],
                   [1, 11, 22, 23, 0],
                   [1, 33, 32, 34, 11],
                   [1, 33, 0, 53, 41],
                   [1, 0, 54, 0, 14]
                   ])

注意在上面的用例中,我在最后一行添加了 14,我的程序因一个约束而失败,其中 14 值在不同的列中

  1. 我也想知道我应该使用什么样的算法,例如回溯/约束编程

任何建议都将有助于解决问题或代码片段

标签: pythonarraysalgorithmnumpymatrix

解决方案


推荐阅读