JavaScriptでサブセットを求める

Nao Kawakami
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から必要な要素数の子配列のみフィルターすることでサブセットを求められる。

--

--