JavaScriptでサブセットを求める
Aug 12, 2021
全体のコード
const c = [1, 2 ,3] //このアレイからサブセットを求める
const comb = 2 //2つの要素を選び取るlet bigArr = [[]]for (let j = 0; j < c.length; j++) {
let tempArr = bigArr
for (let i = 0; i < tempArr.length; i ++) {
bigArr = [...bigArr, [...bigArr[i], c[j]]]
}
}
console.log(bigArr.filter(item => item.length == 2))
例として [1, 2, 3]
のアレイから2つの要素を選び取った場合、結果は [1, 2], [1, 3], [2, 3]
になる。
考え方
サブセット全体を格納するアレイと、サブセット自体を格納するアレイを用意する。その二つのアレイを bigArr
に格納した。
サブセットを求める元アレイをループするごとに bigArr
の中身を複製する。そして複製したアレイの中に元アレイの要素を追加する。
一度目のループ
[[]] => [[], [1]]二回目のループ
[[], [1]] => [[], [1], [2], [1, 2]]三回目のループ
[[], [1], [2], [1, 2]]
=> [[], [1], [2], [1, 2], [3], [1, 3], [2, 3], [1, 2, 3]]
ループが終わった後に bigArr
から必要な要素数の子配列のみフィルターすることでサブセットを求められる。