带有n个人和k个目的地的图表

时间:2013-07-02 11:30:00

标签: algorithm graph traveling-salesman

在连线图中,有饥饿人群站立的n个点。每个饥饿的人都想去图中的一家餐厅。每个人的行程距离应在1公里范围内。餐厅不能超过CEILING [n / k]客人。

如果这些饥肠辘辘的人和这个地区的餐馆有分,是否有一个有效的算法在多项式时间运行,告诉每个客人是否可以容纳(如真或假)?

这让我想起了旅行商问题,所以它只是它的修改版本吗?

1 个答案:

答案 0 :(得分:6)

这是二分图上匹配问题的一个示例。这比旅行商问题更容易解决,可以在O((n + k)^ 3)中完成。

有两个子问题:

  1. 查找哪些人可以到达每家餐馆
  2. 了解如何将人与餐馆相匹配以避免超出限制
  3. 到达餐馆

    可以使用例如Floyd-Warshall algorithm计算O(n ^ 3)中任意一对点之间的最短路径。

    允许的匹配是距离小于1 km的连接。

    将人与餐馆匹配

    这个匹配问题可以通过构造图形然后求解最大流量来解决。

    适当的图表是为每个人和每个餐厅提供源节点,汇聚节点和节点。

    1. 将来源连接到容量为1
    2. 的每个人
    3. 每个人在1公里范围内连接每个人,容量为1
    4. 以容量Ceil(n / k)将每个餐厅连接到汇聚节点。
    5. 然后计算通过此图表的最大流量。当且仅当最大流量为n时,每个客人都可以入住。

      有许多algorithms来计算最大流量。一个例子是push-relabel,复杂度为O(V ^ 3),其中V是顶点数(在这个问题中V = n + k + 2)。