在连线图中,有饥饿人群站立的n个点。每个饥饿的人都想去图中的一家餐厅。每个人的行程距离应在1公里范围内。餐厅不能超过CEILING [n / k]客人。
如果这些饥肠辘辘的人和这个地区的餐馆有分,是否有一个有效的算法在多项式时间运行,告诉每个客人是否可以容纳(如真或假)?
这让我想起了旅行商问题,所以它只是它的修改版本吗?
答案 0 :(得分:6)
这是二分图上匹配问题的一个示例。这比旅行商问题更容易解决,可以在O((n + k)^ 3)中完成。
有两个子问题:
可以使用例如Floyd-Warshall algorithm计算O(n ^ 3)中任意一对点之间的最短路径。
允许的匹配是距离小于1 km的连接。
这个匹配问题可以通过构造图形然后求解最大流量来解决。
适当的图表是为每个人和每个餐厅提供源节点,汇聚节点和节点。
然后计算通过此图表的最大流量。当且仅当最大流量为n时,每个客人都可以入住。
有许多algorithms来计算最大流量。一个例子是push-relabel,复杂度为O(V ^ 3),其中V是顶点数(在这个问题中V = n + k + 2)。