Algorithm 如何找到两个集合之间的所有有效对?
首先:用哪种编程语言来解决这个问题并不重要,我很容易将它转换成其他语言 我有一个很难解决的问题,我不知道如何开始。我有X种水果,正好有5种颜色(比如红色、绿色、黄色、蓝色和紫色)。每个水果可以有几种颜色(但至少有一种)。当我需要每种颜色正好一个水果,但两次都没有水果时,我如何找到每个组合(因此总是会购买正好5种颜色正好5个不同的水果) 例如:Algorithm 如何找到两个集合之间的所有有效对?,algorithm,combinations,combinatorics,Algorithm,Combinations,Combinatorics,首先:用哪种编程语言来解决这个问题并不重要,我很容易将它转换成其他语言 我有一个很难解决的问题,我不知道如何开始。我有X种水果,正好有5种颜色(比如红色、绿色、黄色、蓝色和紫色)。每个水果可以有几种颜色(但至少有一种)。当我需要每种颜色正好一个水果,但两次都没有水果时,我如何找到每个组合(因此总是会购买正好5种颜色正好5个不同的水果) 例如: 1. Pears are available in [Red, Green, Yellow] 2. Apples are available in [Re
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个以上的结果
我知道,这是一个相当困难的问题,但也许有人有一个简单的解决方案。据我理解,这个问题可以建模为一个问题;在这里,颜色构成一个分区,而水果构成另一个分区。当且仅当水果
f
在颜色c
中可用时,颜色c
和水果f
之间的边才存在。目标是覆盖所有颜色。是的,没错,我在寻找解决方案时也发现了。但不幸的是,我无法想象如何通过编码来解决这个问题。@SoBiT可以用于一个简单的实现。如果将颜色放在图形的左侧,则运行时间将为O(X)。可以通过所谓的匈牙利算法或使用辅助网络流问题(如果可用)来解决二部匹配问题。@Codor Hungerian对于未加权匹配来说过于复杂和缓慢。它通常用于解决NiklasB的最大权重匹配(分配问题)。也许你是对的,我自己从未实现或尝试过匈牙利算法;您的引用似乎更合适。对于这样一个小问题,您可以简单地测试所有$5^{5}$组合的有效性。[或使用回溯]是的,这就是我尝试的。但我还是不知道怎么做。有没有一种简单的方法可以从2个一维阵列中创建二维阵列?