在Matrix中找到最大总和

时间:2015-03-08 15:10:12

标签: algorithm matrix sum max dynamic-programming

输入:一个二维NxN - 对称矩阵 - 带有NxN个正元素。

输出NxN大小的二维矩阵,其中N个所选元素的总和是所有可能选择中的最大值。未选择的其他元素为零。换句话说,我们应该从矩阵中选择N元素以返回最大总和。

要求:如果矩阵的维度为4*4,我们应选择 4 整数。矩阵中的每一行和每列不应超过 2 次。 例如,如果我们有4*4矩阵,则可以选择以下元素:

(1,2)
(2,3)
(3,4)
(4,1)

但如果我们选择(1,2)(4,1),我们就无法选择(1,3),因为我们使用了1两次。

这个问题有一个有效的算法吗?

1 个答案:

答案 0 :(得分:0)

这个问题出现在那个奇怪的地方,那里没有明显的解决方案多面体具有整体顶点,但它与一般匹配的相似性阻碍了我寻找NP-硬度降低。一般匹配的算法很复杂,即使有办法,修改一个也是一个令人生畏的前景,所以我的建议是使用整数程序求解器。有一个像

这样的公式
maximize sum_{ij} w_{ij} x_{ij}
subject to
sum_{ij} x_{ij} = n
forall k, sum_i x_{ik} + sum_j x_{kj} ≤ 2
forall ij, x_{ij} in {0, 1},

其中w_{ij}是权重矩阵的ij元素。