找到满足条件的集合组合的最佳方法

时间:2015-10-09 13:19:00

标签: c++ algorithm combinations

我遇到了一个问题:有几组数字,我需要找到它们的所有组合,我从每组中选择一个值。第一组中的第一个元素,第二组中的第二个元素等。例如:

Set1 - {1, 2, 3}
Set2 - {4, 5, 6, 7}
Set3 - {8, 9, 10}

结果应为:

1, 4, 8
1, 4, 9
1, 4, 10
1, 5, 8
1, 5, 9
1, 5, 10
...
3, 7, 9
3, 7, 10

我写了一个简单的递归算法。我的算法很像Howto create combinations of several vectors without hardcoding loops in C++?generate all combination of elements in 2d vector的接受答案。

但是这种解决方案对大型集合无效。它需要大约size1*size2*size3的复杂度来获得结果,而对于更大的集合(超过100个元素),它开始消耗大量的CPU资源。是否有任何其他方法或方法可以找到所有组合,这些方法或方法可以更快地工作并且对于较大的组合是最佳的?

P.S。我用C ++编写了算法,但是欢迎使用任何语言作为例子。

编辑:

我需要找到满足特定条件的所有组合,看起来像(A>1) && (B>2) && (C>3)。这意味着如果集合A中的至少一个值大于1,并且集合B中的至少一个值大于2,并且集合C中的至少一个值大于3。

0 个答案:

没有答案