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