Algorithm 分配算法

Algorithm 分配算法,algorithm,Algorithm,你有一张“人”的Lp列表和另一张“食物”的Lf列表 Lp中的每个元素需要Lf中的一个或多个元素,但只能接收一个 算法应该如何决定Lf中的哪个元素分配给Lp中的每个元素(不需要分配所有Lf,也不需要提供给所有Lp)。您正试图最大化分配了所需Lf的Lp的数量。这可以通过将问题建模为图形并解决以下问题来解决: 将每个人都视为图中的一个节点;让我们称之为p节点 将每个食物视为同一图形中的另一个节点;让我们称之为f节点 如果一个人a喜欢食物b,在p_a和f_b之间加一条边。对每个人喜欢的食物都这样做。每个

你有一张“人”的Lp列表和另一张“食物”的Lf列表

Lp中的每个元素需要Lf中的一个或多个元素,但只能接收一个


算法应该如何决定Lf中的哪个元素分配给Lp中的每个元素(不需要分配所有Lf,也不需要提供给所有Lp)。您正试图最大化分配了所需Lf的Lp的数量。

这可以通过将问题建模为图形并解决以下问题来解决:

  • 将每个人都视为图中的一个节点;让我们称之为p节点
  • 将每个食物视为同一图形中的另一个节点;让我们称之为f节点
  • 如果一个人
    a
    喜欢食物
    b
    ,在p_a和f_b之间加一条边。对每个人喜欢的食物都这样做。每个边的容量为1
  • 创建一个连接到每个p节点的源节点I。因为每个人最多可以吃1种食物,所以从I到每个p节点的边也应该有1的容量
  • 创建一个连接到每个f节点的接收器节点O。由于每种食物最多可供1人食用,因此这些边缘的容量也应为1
  • 运行算法(或任何其他最大流量算法);然后看看输出。由此产生的最大流量网络所使用的从p节点到f节点的边就是问题的答案

  • 请注意,通过更改边的容量,您可以适应问题陈述的变化。

    这可以通过将问题建模为图形并解决以下问题来解决:

  • 将每个人都视为图中的一个节点;让我们称之为p节点
  • 将每个食物视为同一图形中的另一个节点;让我们称之为f节点
  • 如果一个人
    a
    喜欢食物
    b
    ,在p_a和f_b之间加一条边。对每个人喜欢的食物都这样做。每个边的容量为1
  • 创建一个连接到每个p节点的源节点I。因为每个人最多可以吃1种食物,所以从I到每个p节点的边也应该有1的容量
  • 创建一个连接到每个f节点的接收器节点O。由于每种食物最多可供1人食用,因此这些边缘的容量也应为1
  • 运行算法(或任何其他最大流量算法);然后看看输出。由此产生的最大流量网络所使用的从p节点到f节点的边就是问题的答案

  • 请注意,通过更改边的容量,您可以适应问题陈述的变化。

    听起来像是找到了一个二部图形的最大匹配,。听起来像是找到了一个二部图形的最大匹配。