是否存在将约束输入与可能输出相匹配的算法?

时间:2016-03-24 16:18:55

标签: algorithm

我正在解决用户提供可以转换为不同最终产品的输入产品列表的问题。每个输入产品都有一组特定的输出。用户还提供了预期输出产品的列表以及他们想要的每个产品的数量。我正在寻找是否有一种已知的算法可以将各种输入与输出相匹配,以尽可能地满足需求。

示例:

  

产品A可以成为产品X和Y
  产品B可以成为产品Y和Z

     

有5 A和7 B.   你能制作3 X,4 Y和6 Z吗?

我想要一种可以帮助我找到输出的方法:

3 A - > X
2 A - > ÿ
2 B - > ÿ
5 B - > ž
缺少1 Z

1 个答案:

答案 0 :(得分:0)

您可以通过将任何max flow algorithms应用于如下构造的流网络来解决此问题:

  • 添加源节点S和汇聚节点T
  • 对于每个输入产品,添加节点A i
  • 对于每个输出产品,添加节点Z j
  • 对于每个输入产品,从S添加一个边缘,其容量等于相应产品的数量
  • 对于每个输出产品,向T添加边缘,其容量等于相应产品的所需数量
  • 从每个A i 和Z j 添加一个容量等于A i 产品数
  • 的边缘

以下是网络如何查找您的示例。

Example

如果最大流量等于进入T的总容量,则解决方案由min cat定义;否则,解决方案是不可能的。

注意:如果您只需要是/否答案,则可以删除A i 节点,并将S中的边添加到Z j ,容量等于所有输入产品的输出总和(即X = 5,Y = 12,Z = 7)。这将产生相同的决策结果,但您无法确定在此过程中需要消耗多少种类型的输入产品。