回答編集履歴

1

ソース修正

2021/08/26 00:50

投稿

退会済みユーザー
test CHANGED
@@ -149,3 +149,43 @@
149
149
 
150
150
 
151
151
  **補足: ** `X`のべき集合を、数学で書くとき、「2のX乗」みたいに書くこともあってん。意味するところとして、`X` の要素の数を `|X|` と書くとすると、`X`のべき集合の要素の数は 2の|X|乗になるねん。今回の例だと、`X = {1, 2, 3, 4, 5, 6}` で、要素の数は 6 個やから、そのべき集合の要素数は 2の6乗の64やねん。これは、`'ABCDEFG'`から作られるピリオド入れた文字列のパターン数に一致するゆうこっちゃ。ただし、64パターンの中には、0個のピリオドを入れる、つまりピリオドを入れないという操作で得られる、元の文字列と同じ文字列も含まれんで。(なぜゆうたら、べき集合には必ず空集合∅が含まれとるからやねん)
152
+
153
+
154
+
155
+
156
+
157
+ **さらに追伸:** 要素n個の集合のべき集合を、再帰と、0以上(2のn乗-1)以下の整数に対するビット操作の2通りで作ろうゆう人がおったわ➡ [Power Set Algorithm with Recursion or Bits](https://blog.devgenius.io/power-set-algorithm-with-recursion-or-bits-cc3ffcfc0daa)
158
+
159
+ ビット操作でやるのやったら、こちらさんが書いたコード
160
+
161
+ ```javascript
162
+
163
+ var powerSet = function (str) {
164
+
165
+ const results = [];
166
+
167
+ for (let i = 0; i < 1 << str.length; i++) {
168
+
169
+ let subset = "";
170
+
171
+ for (let j = 0; j < str.length; j++) {
172
+
173
+ if (i & (1 << j)) {
174
+
175
+ subset += str[j];
176
+
177
+ }
178
+
179
+ }
180
+
181
+ results.push(subset);
182
+
183
+ }
184
+
185
+ return results;
186
+
187
+ };
188
+
189
+ ```
190
+
191
+ の、 `if (i & (1 << j)) {`  でやってる `&` や `<<` だったりが参考になるやもしれんね〜