我有一个GPS点列表......但我要求的也适用于任何X,Y坐标。
在我的用例中,我想分配一组点。每个点只能属于一个集合,每个集合都有一个条件,即集合中任意两个点之间的距离不大于某个常数......这意味着集合中的所有点都适合特定直径的圆。 / p>
对于点数列表,我想找到最佳(或至少某些)排列数量最少的安排。
只有一个点会有集合,因为周围的其他点已经在不同的集合中,或者只是因为周围没有点(它们之间的距离大于集合的条件)...我想要的是什么避免是低效的集合分配,例如而不是找到理想的2组,每组有30分,我找到5组,一组有1分,第二组有40分等等......
我所能做的只是一个蛮力的解决方案,计算所有距离,建立所有可能的集合安排,按照集合的数量对它们进行排序,并选择具有最少数量的集合。
有更好的方法吗?
答案 0 :(得分:1)
这里的问题是NP完全的。你试图解决的是max-clique问题和一个集合覆盖问题。
您的问题可以表示为图G =(V,E),其中顶点是您的坐标,边距是连接的距离。该图可以在O(n ^ 2)时间内完成。然后你过滤掉所有边缘的距离大于你的常数给出图G'。
使用剩余的图G'你想找到所有派系(有效地解决max-clique)。 clique是一组完全连接的顶点。将此列表命名为S。
现在找到涵盖所有顶点V的S的最小元素集是集合覆盖问题。
集合覆盖问题和最大集团都是NP完成的。因此,找到最佳解决方案需要指数时间。您可以查看这两个问题的近似算法。