优化解决方案,在0和1的矩阵中找到2X2的不同正方形

时间:2015-11-15 14:51:00

标签: algorithm data-structures

给出了大小为MXN的布尔矩阵。在给定矩阵中找出最大可能的2X2平方0?

示例输入:

0 0 1 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0

可能的解决方案

  

enter image description here

     

     

enter image description here

在上面2个可能的解决方案中,在第1个中我们只做了2个正方形但在第2个中我们做了3个正方形。在上面的示例中,最大可能的正方形为3。

答案:3

请帮助找出问题的一些优化解决方案。

2 个答案:

答案 0 :(得分:2)

这是set packing的优化变体,其中你有一组S集合,目标是获得S的最大子集,使其元素成对不相交。决策变量询问是否存在大小为k的这样的子集,并且是NP完全的,使得优化变量NP难。这里的集合总是正好是4个元素,它们仍然是NP难的(如果集合恰好有2个元素,那就不会这样了,这很容易出问题。)

解决问题的一种可能方法是使用整数线性编程,例如:

让变量x [i]决定是否采用特定的2x2平方。

maximize sum(x[i])

subject to
x[i] in {0, 1}
if x[i] and x[j] correspond to overlapping squares, x[i] + x[j] <= 1

你可以证明这里也没有1可以涵盖约束这一事实,但你甚至不考虑覆盖一个或多个1的2x2正方形。

答案 1 :(得分:1)

这个问题是NP难的,如here所示。因此,您无法找到始终快速且最优的算法。文章提出了一个因子2近似值,这可能足以满足您的目的。