分配算法

时间:2017-02-03 09:43:44

标签: algorithm

你有一个"人员列表#34; Lp和另一份"食物" LF。

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

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

1 个答案:

答案 0 :(得分:3)

这可以通过将问题建模为图形并求解maximum flow来解决,如下所示:

  1. 将每个人视为图表中的节点;让我们称这些p节点。
  2. 在同一图表中考虑每个食物的另一个节点;让我们称这些f节点。
  3. 如果某人a喜欢食物b,请在 p_a f_b 之间添加边缘。为每个人喜欢的食物做这个。这些边缘中的每一个都具有1的容量。
  4. 创建连接到每个p节点的源节点I.由于每个人最多可以吃1份食物,因此从I到每个p节点的边缘也应该具有1的容量。
  5. 创建一个连接到每个f节点的汇聚节点O.由于每种食物最多可以食用1人,因此这些边缘的容量也应为1。
  6. 运行Edmonds-Karp算法(或任何其他max-flow算法);并查看输出。从最终流网络使用的p节点到f节点的边缘是问题的答案。
  7. 请注意,通过更改边缘的容量,您可以容纳问题陈述的变体。