【发布时间】:2019-08-18 19:17:53
【问题描述】:
我有一个具有一定宽度和高度的网格,其中每个单元格可以是三个可能的值(在本图中显示为白色、绿色和红色):
(来源:corexii.com)
您可以选择任意数量的绿色单元格(在下图中标记为蓝色),它覆盖了 预先确定 正方形半径内的所有红色单元格(标记为黄色)(此处为 2) 围绕选定的单元格:
(来源:corexii.com)
目标是:
- 尽可能多地覆盖红细胞
- 使用尽可能少的蓝色单元格
- 尽快完成
有人对算法有任何想法吗?
我正在研究很多理论,但我最感兴趣的是一个近似值来快速而不是准确地做到这一点。一个快速、合理的结果比整天计算最佳结果更可取。
(上面的插图可能展示了这些细胞最正态的分布,但不应假定与所有可能的分布相似。)
【问题讨论】:
-
你的目标很模糊。是否有优先顺序或效用函数?
-
要求 #3 可能很难,因为它要求您证明不存在比您找到的算法更快的算法。
-
我会使用边界矩形的概念:包含所有红细胞的最小矩形区域。我怀疑该解决方案将具有覆盖正方形粘在此边界矩形内的属性(前提是
n使其适合该矩形)。偏离矩形不会有任何效果,因为那里没有红细胞可以覆盖;您只是在减少该方格的潜在覆盖范围。 -
问题可以转化为解决集合覆盖问题en.wikipedia.org/wiki/Set_cover_problem。注意:这种转变没有一点帮助,但我认为值得一提。
-
@Kaz: 仔细想想,反例很容易构造