【问题标题】:Grid algorithm puzzle网格算法谜题
【发布时间】:2019-08-18 19:17:53
【问题描述】:

我有一个具有一定宽度和高度的网格,其中每个单元格可以是三个可能的值(在本图中显示为白色、绿色和红色):


(来源:corexii.com

您可以选择任意数量的绿色单元格(在下图中标记为蓝色),它覆盖了 预先确定 正方形半径内的所有红色单元格(标记为黄色)(此处为 2) 围绕选定的单元格:


(来源:corexii.com

目标是:

  • 尽可能多地覆盖红细胞
  • 使用尽可能少的蓝色单元格
  • 尽快完成

有人对算法有任何想法吗?

我正在研究很多理论,但我最感兴趣的是一个近似值来快速而不是准确地做到这一点。一个快速、合理的结果比整天计算最佳结果更可取。

(上面的插图可能展示了这些细胞最正态的分布,但不应假定与所有可能的分布相似。)

【问题讨论】:

  • 你的目标很模糊。是否有优先顺序或效用函数?
  • 要求 #3 可能很难,因为它要求您证明不存在比您找到的算法更快的算法。
  • 我会使用边界矩形的概念:包含所有红细胞的最小矩形区域。我怀疑该解决方案将具有覆盖正方形粘在此边界矩形内的属性(前提是n 使其适合该矩形)。偏离矩形不会有任何效果,因为那里没有红细胞可以覆盖;您只是在减少该方格的潜在覆盖范围。
  • 问题可以转化为解决集合覆盖问题en.wikipedia.org/wiki/Set_cover_problem。注意:这种转变没有一点帮助,但我认为值得一提。
  • @Kaz: 仔细想想,反例很容易构造

标签: algorithm geometry


【解决方案1】:

这个问题是重要的 NP-hard set cover problem 的一个特例。 (宇宙由红色单元格组成,每组由其中一个绿色单元格半径内的红色单元格组成。)greedy algorithm 得到最佳结果的 log n 因子。


templatetypedef is right to point out 这个问题是 NP-hard 问题的特例这一事实并不能证明它实际上也是 NP-hard。这就是为什么我在上面的措辞中小心翼翼地不暗示后者。但是,作为 NP-hard 问题的特例是一个不容忽视的信号:许多特殊情况在进一步调查后证明本身就是 NP-hard。

所以这是一个粗略的草图,这个问题实际上是 NP-hard,通过减少 VERTEX COVER FOR PLANAR GRAPHS OF MOST OF DEGREE at most Four.

假设我们有一个度数最多为四的平面图,例如:

每个顶点用一个绿色方块表示,每个边用红色和绿色方块交替链表示,这样有偶数个绿色方块,奇数个红色方块,每个绿色方块只会覆盖这两个如果选择,两边的红色方块。半径为 2,这是图形的一种可能表示形式:

为了覆盖所有的红色方块,我们需要在每条链上选择至少一半的绿色方块,对应于原始图的一条边。如果我们恰好选择每条链上一半的绿色方块,则在每条边的一端留下一个未覆盖的红色方块(我们可以选择哪一端)。因此,如果我们能找到最小的顶点集,使得每条边都与该集合中的一个顶点相关,那么我们就得到了最小的绿色正方形集。

在示例中,如果我们选择顶点 ad,我们可以使用八个绿色方块覆盖红色方块:

而这对应于原图中的最小顶点覆盖:

【讨论】:

  • 满足第 1 和第 3 条标准,第 2 条失败
  • 这是集合覆盖的一个特例这一事实并不意味着它在计算上必然难以解决。例如,2SAT 是 SAT 的一个特例,但有一个线性时间解。
  • 是的,如果半径可以无限大,那么你只需要添加一个蓝色方块。如果半径很小,那么它也很容易计算。
  • 我可以使用它的改编版本。我将使用启发式方法最小化覆盖集的数量(基本上,当下一个最佳集不再值得时停止)。
  • @templatetypedef:查看修改后的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-03
  • 2012-10-28
  • 2011-01-17
  • 2021-09-13
相关资源
最近更新 更多