好的,过去几天我一直在为此烦恼。什么是最好的(没有巨大开销的任何东西)生成所有可能组合的数组的方法
var input = [
{a: 1}, {a: 2, b: 3},
{b: 4}, {b: 5}, {a: 6}
];
所以我希望产生以下内容:
var output = [
{a: 1}, {b: 4}, {b: 5}, {a: 6},
{a: 1, b: 4}, {a: 1, b: 5},
{a: 6, b: 4}, {a: 6, b: 5},
{a: 2, b: 3}
];
事情是,在我的具体情况下,我在谈论4个属性(我实际上需要为每组不同的属性集生成一个单独的数组,但这些都是我以后应该能够自己实现的东西) 。然而,我正在寻找的只是一些关于如何处理这个问题的通用伪代码,而不是为我编写它或类似的东西。
我觉得这应该是我应该能够理解的东西,但我只是没有到达那里。首先,我为所有属性组合生成单独的数组(所有a
' s,所有b
' s,所有c
' s,所有{{1所有ab
' s等等。但事情是,对于每个bc
所有a
,b
&{39}和c
& #39; S。现在,为单个属性写出来很简单,但编写一个通用的解决方案,为n属性做这些只是完全逃避我。
答案 0 :(得分:3)
我不确定我是否真的理解这些要求,但您可以尝试这些行的递归解决方案(伪代码而非javascript):
def generate(i,C):
# C is a dictionary representing the currently defined properties
# We are allowed to add to our set of properties from the choices input[i],input[i+1],...
# First choose a non-conflicting set of additional properties to add
while i<len(input):
if all of properties in input[i] are not in C:
Add properties in input[i] to C
solutions.append(C)
generate(i+1,C)
Remove properties in input[i] from C
i++
generate(0,{})