用圆圈找到一组点的封面

时间:2011-01-16 14:38:58

标签: algorithm math

在由坐标和数字K(0

任何人都可以帮我吗?

2 个答案:

答案 0 :(得分:5)

这个问题被称为(离散)$ k $ -center问题,并且是群集中众所周知的问题。虽然问题通常是NP完全的,但是有一种非常简单的算法可以在任何度量的最优解的因子2内生成解(包括问题的隐含的2-D欧几里德距离)。这是由于冈萨雷斯,如下

  1. 选择任何一点
  2. 找到最远的邻居
  3. 找到离这两个最远的点
  4. 等等,直到你有k分。
  5. 你最终得到的半径R是从最后一点到下一个最远点的距离。通过构造,可以保证覆盖半径为中心的每个k点的圆盘的所有点,并且通过三角不等式,该R在最佳半径的2倍内。

    如果你知道你在飞机上,你可以在理论上做得更好(包括在n中获得时间多项式的精确算法,在k中获得指数),但在实践中,上述算法可能是最简单的

答案 1 :(得分:1)

您描述的问题是一个更为一般的优化问题的实例,称为covering problem,可以使用linear programming relaxation来解决。您可以定义一个在圆的半径 R 中为线性的成本函数(例如,所有圆的半径之和),以及在indicator variables中选择哪些点的成本函数选择绘制圆圈。此成本函数将根据约束条件进行定义,这些约束条件会强制圆圈覆盖集合中的所有点(请查看LP上的维基百科文章中的示例)

一旦定义了成本函数和约束,就可以使用several solvers(其中许多是免费的)来解决优化问题。