Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 如何找到两个集合之间的所有有效对?_Algorithm_Combinations_Combinatorics - Fatal编程技术网

Algorithm 如何找到两个集合之间的所有有效对?

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

首先:用哪种编程语言来解决这个问题并不重要,我很容易将它转换成其他语言

我有一个很难解决的问题,我不知道如何开始。我有X种水果,正好有5种颜色(比如红色、绿色、黄色、蓝色和紫色)。每个水果可以有几种颜色(但至少有一种)。当我需要每种颜色正好一个水果,但两次都没有水果时,我如何找到每个组合(因此总是会购买正好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个以上的结果


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

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

是的,没错,我在寻找解决方案时也发现了。但不幸的是,我无法想象如何通过编码来解决这个问题。@SoBiT可以用于一个简单的实现。如果将颜色放在图形的左侧,则运行时间将为O(X)。可以通过所谓的匈牙利算法或使用辅助网络流问题(如果可用)来解决二部匹配问题。@Codor Hungerian对于未加权匹配来说过于复杂和缓慢。它通常用于解决NiklasB的最大权重匹配(分配问题)。也许你是对的,我自己从未实现或尝试过匈牙利算法;您的引用似乎更合适。对于这样一个小问题,您可以简单地测试所有$5^{5}$组合的有效性。[或使用回溯]是的,这就是我尝试的。但我还是不知道怎么做。有没有一种简单的方法可以从2个一维阵列中创建二维阵列?