Algorithm 分配2个项目的最大匹配

Algorithm 分配2个项目的最大匹配,algorithm,graph,Algorithm,Graph,聚会上有N个人。每个人都有一些食物和饮料的偏好。考虑到某个人喜欢的所有类型的食物和饮料,找出可以分配给他们选择的饮料和食物的最大人数 一个人对食物和饮料可能有几种选择,例如,一个人可能喜欢食物A、B、C和饮料X、Y、Z.。如果我们给某人分配(A,Z),我们认为这个人被正确地分配了。< / P> 考虑到我们需要处理两个约束条件,我们如何解决这个问题。让F是所有食物的集合,D是所有饮料的集合,p是所有人的集合 构建2个二部图G和G',这样:对于G:第一部分集是p,第二部分集是F,对于G':第一部分集

聚会上有N个人。每个人都有一些食物和饮料的偏好。考虑到某个人喜欢的所有类型的食物和饮料,找出可以分配给他们选择的饮料和食物的最大人数

一个人对食物和饮料可能有几种选择,例如,一个人可能喜欢食物A、B、C和饮料X、Y、Z.。如果我们给某人分配(A,Z),我们认为这个人被正确地分配了。< / P>
考虑到我们需要处理两个约束条件,我们如何解决这个问题。

让F是所有食物的集合,D是所有饮料的集合,p是所有人的集合

构建2个二部图G和G',这样:对于G:第一部分集是p,第二部分集是F,对于G':第一部分集是p,第二部分集是D。分别对G和G'进行最大匹配。称M为G上的最大匹配,称M为G上的最大匹配。M是顶点对的列表:(p1,f1)、(p2,f2)。。。其中pi和fi分别是人和食物。M'也是顶点对的列表:(p1,d1),(p3,d3)

现在,将M和M'与同一个人合并:(p1,f1)+(p1,d1)=(p1,f1,d1),这就是p1的食物饮料组合。假设p2与f2匹配,但p2在G(无饮料)中没有匹配,则忽略它


二部图匹配的一个好算法是Hopcroft-Karp算法

嗨,OP,很抱歉我之前给你的解决方案,我认为一种食物可以由两个人分享是错误的。修订后的解决方案是在一种食物不能共享的情况下(饮料也是如此),因此每个人都有一种独特的食物饮料组合,没有人共享任何食物(或饮料)。