While learning for interviews, I just want to share an example on how to generate all unique subsets of a set in javascript.
Asked
Active
Viewed 2,878 times
-4
-
Possible duplicate [This may help][1] [1]: http://stackoverflow.com/questions/5752002/find-all-possible-subset-combos-in-an-array – Lonely Aug 13 '13 at 08:28
-
@Lonely, it is not duplicate and the answered algorithm is not even efficient. – Dewey Aug 13 '13 at 17:24
1 Answers
9
The implementation should look like this:
(function(input){
var result, mask, total = Math.pow(2, input.length);
for(mask = 0; mask < total; mask++){ //O(2^n)
result = [];
i = input.length - 1; //O(n)
do{
if( (mask & (1 << i)) !== 0){
result.push(input[i]);
}
}while(i--);
console.log(result);
}
})(['a','b','c','d','e','f']);
The idea here is to use a number from 0 to n (n is the length of the input array), extract each bit to form decide to pick the element or not.
For example, if you have [a,b,c] as the input, the number will iterate from 0 -> 5, in binary they will be 000, 001, 010, 011, 100, 101, 110, 111 and there for the result would be , c, b, bc, a, ac, ab, abc .
Total running time is O(n2^n).

Dewey
- 1,193
- 14
- 18
-
We actually have 2^n - 1 combinations, since the first one in this case is always 0. Wouldn't it be more optimal if "mask" would start at 1 instead of 0? – just_a_girl Nov 11 '16 at 18:15
-
Your answer also fits this question: http://stackoverflow.com/questions/42773836/how-to-find-all-subsets-of-a-set-in-javascript - you might want to post it there, too. – le_m Mar 13 '17 at 21:46