给出了大小为MXN的布尔矩阵。在给定矩阵中找出最大可能的2X2平方0?
示例输入:
0 0 1 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
可能的解决方案
和
在上面2个可能的解决方案中,在第1个中我们只做了2个正方形但在第2个中我们做了3个正方形。在上面的示例中,最大可能的正方形为3。
答案:3
请帮助找出问题的一些优化解决方案。
答案 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近似值,这可能足以满足您的目的。