分组坐标的特殊情况

时间:2010-10-06 23:33:55

标签: algorithm grouping coordinates

我正在尝试编写一个程序,将学生放入汽车中拼车参加活动。我有每个学生的地址,并且可以对每个地址进行地理编码以获得坐标(地址足够接近我可以简单地使用坐标之间的欧几里德距离。)一些学生有车,可以驾驶其他人。如何有效地将学生分组到汽车中?我知道分组通常使用像K-Mean这样的算法来完成,但是我只能找到将N个点分组为M个任意大小的组的算法。我的团队具有特定的规模和定位。我在哪里可以开始?一个简单的贪婪算法将确保分配的第一辆汽车具有最小的起飞距离,但我认为平均值会很高。

2 个答案:

答案 0 :(得分:2)

假设您正在尝试最小化行进的总距离。显然,旅行推销员问题是您问题的一个特例,因此您的问题是NP难的。这使我们进入了启发式/近似算法领域。

问题还需要更多的规范,例如,如何让学生适应特定的汽车。让我们说,尽可能多的。

如何将其解决为根植于最终目的地的最小生成树。然后每个带车的学生都负责收集所有孩子的节点。所以总行进距离最多是生成树总长度的2倍,生成树的总长度是2倍。当然这很荒谬'因为在这种情况下,根旁边的节点将驱动大型公共汽车而不是汽车。

那么你开始玩包装游戏,你试图贪婪地填满汽车。

我知道这不是解决方案,但这可能有助于您更好地指定问题。

答案 1 :(得分:-1)

这是一个古老的问题,但是既然我找到了它,其他人也会这样。

将学生按距离分组。找出所有两组学生之间的距离。从最近的学生开始,将他们添加到一个小组中,然后继续添加,直到所有学生都在小组中。如果学生超过了50英里的阈值距离,请不要将它们组合成一组(这将导致一些学生单独学习)。如果学生有不同大小的汽车,当组中的学生(以及您尝试添加的任何一个)达到最大汽车大小时,请停止添加汽车。

找到最佳(您要求有效)解决方案需要一个更明确的问题,这似乎是您没有的。如果你想消除个别驱动程序,采用上述解决方案和特殊外壳的异常值,将它们单独分组并交换相邻组的人员以适应它们,可以找到一个非常强大的解决方案。