0

複数の値のセットが与えられた。順序を維持しながら、これらの値のすべての組み合わせ (この用語を大まかに使用していますが、正しい単語が何であるかはわかりません) を見つけたいと考えています。

つまり

var set1 = ["a","1"];
var set2 = ["b","2"];
var set3 = ["c","3"];

出力は

[a][b][c]
[a][b][3] 
[a][2][c] 
[a][2][3] 
[1][b][c]
[1][b][3] 
[1][2][c] 
[1][2][3] 

これは正しい結果を提供しますが、これはあまり良い解決策ではないと思いますが、これを再帰的に行うことについて頭を悩ませることはできません。例は Javascript ですが、任意の言語または洞察で問題ありません。

var set1 = ["a","1"];
var set2 = ["b","2"];
var set3 = ["c","3"];

var input = [set1, set2, set3];
var result = [];

for(var a=0;a<input[0].length;a++){
    for(var i=0;i<input[1].length;i++){
        for(var j=0;j<input[2].length;j++){
            var output = [];
            output.push(input[0][a]);
            output.push(input[1][i]);
            output.push(input[2][j]);
            result.push(output);
            console.log("["+input[0][a]+"]["+input[1][i]+"]["+input[2][j]+"]");
        }
    }           
}   
4

1 に答える 1

0

確かに、次のように空間を再帰的に探索できます。

function extend_set (base, sets) {
    if(sets.length === 0) {
        return console.log('found: '+base);
    }
    sets = sets.slice();

    var choices = sets.shift();
    for (var i = 0; i < choices.length; i += 1) {
        var b2 = base.slice();
        b2.push(choices[i]);
        extend_set(b2, sets);
    }
}

var set1 = ["a","1"];
var set2 = ["b","2"];
var set3 = ["c","3"];
var sets = [set1, set2, set3];
extend_set([], sets);
于 2013-03-10T20:13:06.087 に答える