【问题标题】:find (near-)minimal covering set of discs on a 2-D plane在二维平面上找到(接近)最小覆盖的一组圆盘
【发布时间】:2010-11-01 14:14:03
【问题描述】:

好的,假设我在固定已知位置的飞机上放置了一堆光盘。每个圆盘的半径为 1 个单位。该平面被圆盘组完全覆盖,实际上,它被圆盘组广泛覆盖,在某些区域以一个或两个数量级覆盖。我想找到仍然完全覆盖飞机的光盘子集。最佳是好的,但不是必需的。

这是之前的插图:

这是后面的插图:

在我看来,Delaunay 三角测量存在双重问题,但我不太确定这对我有帮助。我也知道这与计算几何中的圆盘覆盖问题相似但不一样。这是一个我不知道名字的标准问题吗?

在我看来,可能的方法包括使用局部贪婪搜索来增加覆盖集,并迭代地使用最近对查询来一次删除一个光盘。我不确定是否可以保证其中任何一个都能正常工作,而且我还没有仔细研究过细节。

哦,如果您没有猜到,该应用程序会在查询时找到邮政编码质心的子样本来覆盖地图,因此 n 约为 50,000。

【问题讨论】:

  • 这可能更适合cstheory.stackexchange.com?
  • 鉴于问题的性质,您可能会在 mathoverflow.com 找到更多有关此类事情的帮助。
  • 也许吧。这里还有很多其他的计算几何问题。但是如果我没有得到答案,我会交叉发布它。谢谢!

标签: algorithm geospatial computational-geometry


【解决方案1】:

游戏计划

以下基本上只是对您的问题的更准确的重述,但它可能会有所帮助:

  1. 枚举在绘制所有磁盘的边界时产生的平面中的每个连接区域。根据假设,这些区域中的每一个都被 1 个或多个磁盘覆盖。
  2. 每个区域都是一个“被覆盖的东西”,每个磁盘都是一个“覆盖的东西”。在这组区域上找到minimum set cover。不幸的是,这是 NP 难的。

这可能不会利用问题中所有可用的结构,但它肯定会为您提供最佳答案。

枚举区域

在步骤 1 中枚举区域并记录每个区域覆盖的磁盘是棘手的部分。区域通常不是凸的,这使得交叉测试变得棘手,并且您添加的每个圆圈都可能使区域数量翻倍。以下是我的处理方法:

忘记每个区域的实际位置,只根据它在哪些磁盘内部和在哪些磁盘之外来定义一个区域。 IE。一个区域由一个 0/​​1 值的长度为 n 的向量定义,每个值都指示该磁盘内部或外部的区域是否包含在交叉点中 - 所讨论的区域是通过与所有这些 n 个区域相交而形成的。所以原则上你最多可以有 2^n 个区域,但实际上一些(大多数)向量会产生空区域,因为它们需要与两个没有交集的磁盘相交——这很容易测试,谢天谢地。递归生成所有非空区域应该很简单,除了...

坏消息

不幸的是,我现在发现有必要执行完整的交叉点测试,因为并不总是可以判断一个区域何时会为空。关键的反例是,给定两个磁盘 A 和 B 有少量重叠,另一个磁盘 C 与 A 和 B 中的每一个都重叠,取决于所有 3 个磁盘的位置,所有 3 个磁盘的交集可能会也可能不会不为空。 (要看到这一点,请在绘图程序中以 50% 的不透明度绘制 3 个不同颜色的圆盘,然后移动它们。)

可行的黑客攻击

由于生成非空区域的确切列表看起来需要大量工作并且由于交叉测试需要很长时间,并且您声称不需要最佳解决方案,您可以尝试只使用网格样本点作为“要覆盖的东西”的集合,而不是非空区域的确切列表。确定哪些磁盘覆盖给定的采样点很简单。然后像以前一样求解最大集覆盖。

要确信没有间隙,请重新运行几次,每次随机抖动样本点的坐标。增加样本点的密度,直到最终结果没有变化。

【讨论】:

  • 哇,很好的答案。我会花一些时间思考/解决这个问题,如果最终运行良好,我会将解决方案归功于您。
  • 我最终做了类似的事情。我使用 40,000 多个磁盘中心作为要覆盖的点,生成覆盖集(慢... O(n^2)),然后使用最小集覆盖的贪婪近似来选择覆盖很多点的磁盘,直到没有更多具有未覆盖点的磁盘(更快,O(n * m),m随着迭代而减小)。从 40,000 个磁盘增加到刚刚超过 200 个!视觉上不是很理想,但绝对足够接近!
  • @Harlan:嗯,很好。现在没有实际意义,但是您可以通过按最长坐标(例如 y)对磁盘中心和点(在这种情况下它们是相同的)进行排序来减少对覆盖磁盘的 O(n^2) 搜索:寻找在 (Xi, Yi) 处覆盖点 i 的圆圈,您只需检查那些中心的 y 坐标为 >= Yi - r 的圆圈。这意味着您需要开始检查的圆圈列表中的“起点”只会随着您从检查一个点移动到下一个点而增加。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-04
  • 1970-01-01
相关资源
最近更新 更多