如何找到两组之间的所有有效配对?

时间:2014-05-05 14:00:43

标签: algorithm combinations combinatorics

首先:使用哪种编程语言无关紧要,将其转换为其他编程语言很容易。

我有一个很难解决的问题,我不知道如何开始。我有X种水果和 5种颜色(比方说红色,绿色,黄色,蓝色和紫色)​​。每种水果都有多种颜色可供选择(但至少有1种)。我怎样才能找到每种组合,当我需要每种颜色的1个果实但没有两次果实时(因此总会以5种不同的颜色购买 5种不同的水果 )?

例如:

1. Pears are available in [Red, Green, Yellow]
2. Apples are available in [Red, Green]
3. Plums are available in [Purple]
4. Grapes are available in [Red, Green, Purple]
5. Bananas are available in [Blue, Yellow]

由于香蕉是唯一可用蓝色的水果,所以已经确定,香蕉将以蓝色购买,而不是黄色。

这些将是此列表的解决方案:

1. Yellow Pear, Red Apple, Purple Plum, Green Grapes, Blue Banana
2. Yellow Pear, Green Apple, Purple Plum, Red Grapes, Blue Banana

这里没有其他组合可行。是否有任何算法可以使用动态列表来执行此操作,该列表可能还有超过5个水果?

我知道,这是一个非常难的问题,但也许某人有一个简单的解决方案。

1 个答案:

答案 0 :(得分:1)

根据我的理解,问题可以建模为bipartite matching problem;这里颜色构成一个分区,而果实构成另一个分区。当且仅当水果c有颜色f时,才会存在颜色f和水果c之间的边缘。目标是涵盖所有颜色。