从采访中:删除n×n矩阵中的行和列以最大程度地增加剩余值的总和
问题内容:
给定一个n×n的实数矩阵。您可以擦除任何数量(从0到n)的行和任何数量(从0到n)的列,然后再计算剩余条目的总和。提出一种算法,该算法找出要擦除的行和列,以使该总和最大化。
问题答案:
问题是NP难的。(因此,您不应期望使用多项式时间算法来解决此问题。但是,仍然存在(非多项式时间)算法要比蛮力略好一些。)NP硬度证明的思想是:如果我们能够解决这个问题,那么我们就可以解决一般图中的集团问题。(最大爬坡问题是在图中找到最大的成对连接的顶点集。)
具体来说,给定具有 n 个顶点的任何图,让我们形成矩阵A,其条目a[i][j]
如下:
a[i][j] = 1
对于i == j
(对角线条目)a[i][j] = 0
如果图(和i≠j
)中存在边(i,j )a[i][j] = -n-1
如果边缘(i,j)在图中 不 存在。
现在假设我们解决了删除一些行和列(或等效地, 保留 一些行和列)的问题,从而使矩阵中的条目之和最大化。然后,答案给出了图中的最大提示:
-
索赔 :在任何最佳解决方案中,没有保留行
i
和列j
,其中图表中不存在边(i,j)。证明:由于a[i][j] = -n-1
所有正条目的和最多为和n
,所以选择(i,j)将得出负数。(请注意,删除 所有 行和列将得出更好的总和,为0。) -
索赔 :在(某些)最优解中,保留的行和列的集合相同。这是因为从任何最佳解决方案开始,我们可以简单地删除所有未保留
i
其列的行,i
反之亦然。请注意,由于唯一的正项是对角项,因此我们不会减少总和(根据先前的声明,我们也不会增加总和)。
所有这些都意味着,如果图具有最大的集团规模k
,那么我们的矩阵问题将具有sum的解,k
反之亦然。因此,如果我们能够在多项式时间内解决初始问题,那么团簇问题也将在多项式时间内解决。这证明了最初的问题是NP-
hard
。(实际上,很容易看到初始问题的决策版本-
是否有一种方法可以删除一些行和列,使总和至少为k
-在NP中,因此初始问题的(决策版本)为实际上是NP完整的。)