【问题标题】:Maximum covering of a polygon with fixed, give size identical squares固定的多边形的最大覆盖,给定大小相同的正方形
【发布时间】:2013-11-28 20:58:43
【问题描述】:

我想了解以下问题的算法: 给定一个包含 0 和 1 的矩阵以及正方形的大小,覆盖 1 的相邻正方形的最大数量是多少,它们的位置是什么?如果有几种可能的正方形组合,只需输出一个。

EX:对于 2 的大小:

输入:

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

可能的输出: 最多 3 个方格(每个方格标有一个字母)

0 0 1 0 0 0
0 1 一个 1 0
0 0 一个 1 0
0 b b c c 0
0 b b c c 0
0 1 1 0 0 0

我想知道是否存在用于最优解的多项式(或伪多项式)算法。如果是,算法及其渐近复杂度是多少?如果不是,我应该使用什么近似算法?

此外,您可以假设,如果这使问题变得更容易,则在 1 的区域内没有 0 的“孤岛”,因此不应遇到以下情况:

1 1 1
1 0 1
1 1 1

我是一名业余程序员,这是我在这里的第一个问题。如果您的回答还建议该算法的研究领域,那对我来说将非常有用。提前致谢。

【问题讨论】:

  • 正方形的大小也给定了吗?正方形可以重叠吗?
  • 方格长度预先给定,方格不能重叠。

标签: algorithm 2d area


【解决方案1】:

我想知道是否存在用于最优解的多项式(或伪多项式)算法。如果是,算法及其渐近复杂度是多少?

多项式算法不存在。这就是为什么。我们将把这个问题简化为一个更广为人知的问题。

我们可以这样做:对于棋盘上的每个单元格 (x, y),我们可以判断是否可以在棋盘上放置一个正方形,使得该正方形的左上角位于 (x, y) 处,并且square 仅覆盖 1s。我们可以用预先计算所需的 O(n^2) 时间在恒定时间内回答此类问题。对于所有可以做到这一点的 (x, y),我们可以构造以下图 G(E,V)。顶点E的集合正是满足上述条件的这组(x,y)。我们也说 ((x0, y0), (x1, y1)) 是一条边,如果分别从 (x0, y0), (x1, y1) 开始的正方形只覆盖 1s 并且它们有一个共同的正方形。但由于我猜测它们很难实现并且不会带来太大的改进,我建议你编写一个简单的回溯算法。

现在请注意,您的问题现在已简化为finding the maximum independent sets。这个问题是NP-hard。但是请注意,存在比文章中提到的通常的蛮力O(n^2*2^n)(检查每个顶点子集并检查它是否是独立集)更有效的算法。但是由于我认为它们不会给您带来太大的改进,我建议您编写一个简单的回溯算法。在这种情况下,这是最好的做法。

【讨论】:

    【解决方案2】:

    NP 完全证明

    我认为您可以通过将平面 3-sat(已知为 NP-完全)减少到您的问题的大小为 3 来证明这是 NP-完全的。

    这个想法是利用看起来像这样的电线:

    111 111 111
    111 111 111
    1111111111111
      111 111 111
      111 111 111
    

    这可以通过两种方式解决:

    aaa bbb ccc
    aaa bbb ccc
    aaa1bbb1ccc11
      111 111 111
      111 111 111
    

    111 111 111
    111 111 111
    11aaa1bbb1ccc
      aaa bbb ccc
      aaa bbb ccc
    

    两种方式都使用相同数量的方格(在这种情况下为 3 个,尽管电线可以进一步延长)。

    现在的想法是为平面 3-sat 问题中的每个文字使用其中一根线。
    (两种覆盖方式分别对应字面量是真还是假)

    同样构造一个空盒子:

    11X
    111
    1111
    Y111
     11Z
    

    对于您的每个条款。

    当且仅当 X 空闲或 Y 空闲或 Z 空闲时,此框才有空间容纳单个正方形。

    使用更多线将子句框连接到文字线 (在子句框的X或Y或Z处连接,根据该字面在子句中的正反使用选择导线上的连接点)。

    这个想法是每根电线总是被固定数量的正方形覆盖, 但是如果至少有一条文字线最终没有覆盖特殊角之一(X,Y,Z),则子句框只会被正方形覆盖。

    因此,对于每个满足的子句,可以放置的最大方块数将是一个固定数(对于电线)+ 1。

    因此,您可以通过找到同时满足所有子句的文字的分配来确定是否可以解决平面 3-sat。

    近似值

    在实践中,您可以通过使用贪心覆盖(在 4 倍以内,因为放置一个正方形最多可以与最优解中的 4 个正方形发生碰撞)来获得一个简单的近似算法。

    现实世界的解决方案

    我希望标准 SAT 求解器在找到近似/最佳答案方面确实做得很好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-03
      • 1970-01-01
      • 2012-05-25
      • 2015-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多