【发布时间】:2014-01-08 00:00:10
【问题描述】:
假设我有以下数组:
A = [
['a', 'b', 'c'],
['d', 'e', 'f'],
['g', 'h'],
['i'],
['j', 'k', 'l']
]
我想找到每个数组元素与其他数组元素的所有可能组合(即“adgij”是一种可能性,但不是“abcde”)。
我可以暴力破解它,然后像这样循环所有内容(javascript):
var A = [
['a', 'b', 'c'],
['d', 'e', 'f'],
['g', 'h'],
['i'],
['j', 'k', 'l']
],
combinations,
newCombinations = [];
A.forEach(function(a, index) {
newCombinations = [];
if (index === 0) {
newCombinations = a;
} else {
a.forEach(function(val){
combinations.forEach(function(combination){
newCombinations.push(combination + val);
});
});
}
combinations = newCombinations;
});
这种方法的问题在于它是广度优先的,所以如果我想在 n 次迭代后停止,我会得到不完整的组合。
有没有办法使用深度优先方法获得所有可能的组合?
【问题讨论】:
-
如果我理解正确,您应该搜索“深度优先笛卡尔积”。这是我找到的一个链接:gist.github.com/andreasvc/5455646
-
这可能与以下内容重复:stackoverflow.com/questions/3621268/…
标签: algorithm combinations combinatorics