我的朋友最近从Google采访中得到了这个问题,我认为这是一个棘手的问题。
给定2D阵列上的人物和汽车,找到的最佳分配 定义“最佳”含义的人和汽车。
如果我们将最佳分配定义为所有对之间的最小曼哈顿总距离(每对距离的最小总和)。什么是解决此问题的好方法,我应该使用哪种算法?
使用“最优”的不同定义,是否有更好的方法可以更有效地解决此问题?
答案 0 :(得分:1)
如果您使用曼哈顿总距离(或几乎所有其他距离),则这是“分配问题”或“最低成本两方匹配”的一个实例。
您可以使用匈牙利算法或其他方法来解决它:https://en.wikipedia.org/wiki/Assignment_problem
答案 1 :(得分:-1)
我相信另一个条件是,对于任何人,到任何两辆车的距离都不应该相同。同样,对于任何汽车,到任何两个人的距离都不应相同。最终,您想给所有人一辆车。
贪婪的解决方案是这样的:计算每个(汽车,人)距离的距离并对其进行排序。如果未配对,则穿过阵列并配对(汽车,人)。该算法对m个汽车和n个人使用O(mnlog(mn)),但可以通过1.进行改进。在计算距离时使用并行化。2.每个人仅保留O(n)优先级队列。当一个人配对时。我们不再将其距离添加到队列中。因此,该算法大约需要O(mnlog(n))。最优性可以通过归纳证明。