在javascript中生成集合的所有子集

时间:2013-08-13 05:53:17

标签: javascript algorithm subset

在学习访谈时,我只想分享一个如何在javascript中生成集合的所有唯一子集的示例。

1 个答案:

答案 0 :(得分:8)

实现应如下所示:

(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']);

这里的想法是使用从0到n的数字(n是输入数组的长度),提取每个位以决定是否选择元素。

例如,如果您有[a,b,c]作为输入,则数字将从0开始重复 - >在图5中,二进制它们将是000,001,010,011,100,101,110,111,其结果将是,c,b,bc,a,ac,ab,abc。

总运行时间为O(n2 ^ n)。