我给出了以下问题。一组位置(例如,大约200个足球俱乐部)分布在地图上。我想根据彼此的距离对位置进行分组。结果应该是一个小组列表(大约10到20个),这样每个足球俱乐部必须开车去参观他们小组内所有其他俱乐部的距离最小化。
我很确定已存在算法。我可能只需要这个问题的“官方”名称。
有人可以帮助我吗?
答案 0 :(得分:2)
你可能正在寻找Data Clustering Algorithms。由于您了解了簇的数量,因此一个简单的算法是k-means clustering。
答案 1 :(得分:0)
如果你想在一开始就选择最大距离d(然后确定几个小组足以保证没有球队需要超过这个距离才能到达他们自己组中的另一个球队),那么你可以制定作为graph colouring问题的问题:为每个团队制作一个顶点,并在它们之间的距离超过 d时在两个顶点之间放置一条边。图形着色问题的解决方案指定了一种颜色" (只是一个标签)到每个顶点,以便(a)没有两个由边连接的顶点被分配相同的颜色和(b)使用的不同颜色的数量是最小的。 (换句话说,边缘代表"冲突",表明两个端点不能属于同一个组。)所以这里,每种颜色对应一个组,保证只包括所有团队< = d彼此,解决方案将尝试最小化组的总数。您可能需要重新运行几个不同的d值,直到您获得可接受的少数组的解决方案。
请注意,这是一个NP难问题,因此可能需要很长时间才能找到确切的(最小组数)解决方案。但是,有许多启发式方法要快得多,但仍然可以做得不错。