输入:一个二维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
两次。
这个问题有一个有效的算法吗?
答案 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
元素。