我有一些宽度和高度的网格,其中每个单元格可以有三个可能的值(在此图中显示为白色,绿色和红色):
illustration http://corexii.com/grid-algorithm-problem-2.png
您可以选择任意数量的绿色单元格(下图中标记为蓝色),其中包含预定方形半径内的所有红色单元格(标记为黄色)(此处 2 < / strong>)围绕选定的单元格:
illustration http://corexii.com/grid-algorithm-problem-3.png
目标是:
任何人对算法都有任何想法吗?
我正在研究很多理论,但我最感兴趣的是近似快速 而不是准确。一个快速,合理的结果比整天计算最佳结果更可取。
(上面的插图可能会显示这些细胞的最正常分布,但不应假设它们与所有可能的分布类似。)
答案 0 :(得分:10)
这个问题是重要的NP-hard set cover problem的一个特例。 (宇宙由红色单元组成,每个集合由一个绿色单元的半径内的红色单元组成。)greedy algorithm位于最佳 n 因子内结果
templatetypedef is right to point out这个问题是NP难问题的一个特例并不能证明它实际上也是NP难的。这就是为什么我在上面的措词中小心谨慎而不是暗示后者。但作为一个NP难问题的一个特例是一个不容忽视的信号:许多特殊情况在进一步调查中变得非常难以实现。
因此,这是一个粗略的草图,这个问题实际上是NP难的,通过减少最多四度的平面图的VERTEX封面。
假设我们有一个最多四度的平面图,例如:
用绿色正方形表示每个顶点,每个边缘用红色和绿色正方形的交替链,这样就有偶数个绿色正方形,奇数个红色正方形,每个绿色正方形只覆盖两个如果选择的话,两边都是红色方块。半径为2时,这是图表的一种可能表示:
为了覆盖所有红色方块,我们需要在每条链上选择至少一半绿色方块,对应于原始图形的边缘。如果我们在每条链上选择正好一半的绿色方块,那么在每条边的一端留下一个未被覆盖的红色方块(我们可以选择哪一端)。因此,如果我们能够找到最小的顶点集,使得每个边都入射到该集合中的顶点,我们就得到最小的绿色方块集。
在示例中,如果我们选择顶点 a 和 d ,我们可以使用八个绿色方块覆盖红色方块:
这对应于原始图中的最小顶点覆盖: