gpt4 book ai didi

javascript - 获取所有可能集合的算法

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:46:37 27 4
gpt4 key购买 nike

<分区>

输入:

[ [a1,b1,c1], [a2,b2,c2,d,2], [a3,b3], ...]

输出:

[ [a1,a2,a3], [a1,a2,b3], [a1,b2,a3], [a1,b2,b3], [a1,c2,a3], [a1,c2,b3], ... ]

所以我需要所有可能集合的组合(顺序无关紧要)。每个输出集 nth 成员都是 nth 输入集的成员。我需要高效的算法,最好是在 javascript 中。


编辑

好吧,我正在努力解决这个问题。

var input = [ [a,b,c], [a1,b1,c1], [a2,b2] ];

var combinationsNum = _.reduce(input,function(num,set){ return num*set.length; }, 1);
var output = new Array(combinationsNum);
for(var i = 0; i < output.length; ++i) output[i] = [];

for(var s = 0; s < input.length; ++s) {
var set = input[s];
for(var m = 0; m < set.length; ++m) {
var memeber = set[m];
// now I need to calculate to which output arrays I have to push this member
}
}

// result should be
// a a1 a2
// a b1 b2
// a c1 a2
// a a1 b2
// a b1 a2
// a c1 b2
// b a1 a2
// b b1 b2
// b c1 a2
// b a1 b2
// b b1 a2
// b c1 b2
// c a1 a2
// c b1 b2
// c c1 a2
// c a1 b2
// c b1 a2
// c c1 b2

正如您在每个 set 上看到的那样,我必须以一定的间隔和时间将其每个成员推送到每个输出数组...我在计算时遇到问题...


我在这个重复问题中找到的最快方法是:

function(arg) {
var r = [], max = arg.length-1;
function helper(arr, i) {
for (var j=0, l=arg[i].length; j<l; j++) {
var a = arr.slice(0); // clone arr
a.push(arg[i][j])
if (i==max) {
r.push(a);
} else
helper(a, i+1);
}
}
helper([], 0);
return r;
};

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com