根据距离在地图上对位置进行分组
Group locations on map based on distance
我给出了以下问题。一组位置(e.x。大约 200 个足球俱乐部)分布在地图上。我想根据彼此之间的距离对位置进行分组。结果应该是一个组列表(大约 10 到 20 个),这样每个足球俱乐部必须开车去访问他们组内的所有其他俱乐部的距离最小。
我很确定算法已经存在。我可能只需要这个问题的 "official" 名称。
谁能帮帮我?
您可能正在寻找 Data Clustering Algorithms. Since you have an idea of the number of clusters, a simple algorithm is k-means clustering。
如果你想在一开始就选择最大距离d(然后确定有多少组足以保证没有团队需要行驶超过这个距离才能到达他们自己组中的另一个团队)那么你可以将问题表述为 graph colouring 问题:为每个团队创建一个顶点,并在两个顶点之间的距离 超过 时在两个顶点之间放置一条边 d.图着色问题的解决方案为每个顶点分配一个 "colour"(只是一个标签),以便 (a) 没有两个由边连接的顶点被分配相同的颜色,并且 (b) 使用的不同颜色的数量是最小的。 (换句话说,边代表"conflicts",表示两个端点不能属于同一个组。)所以这里,每种颜色对应一个组,保证只由都<= d的组组成从彼此,解决方案将尽量减少组的总数。您可能需要使用几个不同的 d 值重新运行,直到您获得具有可接受的少数组的解决方案。
请注意,这是一个 NP-hard 问题,因此可能需要很长时间才能找到精确的(最小组数)解决方案。不过,有许多启发式算法速度更快,而且效果还不错。
我给出了以下问题。一组位置(e.x。大约 200 个足球俱乐部)分布在地图上。我想根据彼此之间的距离对位置进行分组。结果应该是一个组列表(大约 10 到 20 个),这样每个足球俱乐部必须开车去访问他们组内的所有其他俱乐部的距离最小。
我很确定算法已经存在。我可能只需要这个问题的 "official" 名称。
谁能帮帮我?
您可能正在寻找 Data Clustering Algorithms. Since you have an idea of the number of clusters, a simple algorithm is k-means clustering。
如果你想在一开始就选择最大距离d(然后确定有多少组足以保证没有团队需要行驶超过这个距离才能到达他们自己组中的另一个团队)那么你可以将问题表述为 graph colouring 问题:为每个团队创建一个顶点,并在两个顶点之间的距离 超过 时在两个顶点之间放置一条边 d.图着色问题的解决方案为每个顶点分配一个 "colour"(只是一个标签),以便 (a) 没有两个由边连接的顶点被分配相同的颜色,并且 (b) 使用的不同颜色的数量是最小的。 (换句话说,边代表"conflicts",表示两个端点不能属于同一个组。)所以这里,每种颜色对应一个组,保证只由都<= d的组组成从彼此,解决方案将尽量减少组的总数。您可能需要使用几个不同的 d 值重新运行,直到您获得具有可接受的少数组的解决方案。
请注意,这是一个 NP-hard 问题,因此可能需要很长时间才能找到精确的(最小组数)解决方案。不过,有许多启发式算法速度更快,而且效果还不错。