关于javascript:求集合的幂集

幂集:由汇合所有子集组成的汇合

function powerSet(a){
    const powerSet = new Set(new Set());  //空集
    for(const aValue of a){
        for(const set of new Set(powerSet)){
            powerSet.add(new Set(set).add(aValue));
        }
    }
    return powerSet;
}

代码解析:
第2行代码是增加空集,
如果想在创立的同时初始化实例,则能够给 Set 构造函数传入一个可迭代对象,其中须要蕴含插入到新汇合实例中的元素
const powerSet = new Set(new Set());等价于const powerSet = new Set(new Set([]));
传入的可迭代对象中的元素是要插入到新实例里去的。

//留神看s1和s2
const s1 = new Set([1]);
const s2 = new Set(s1);
s2;
//Set(1) {1}[[Entries]]0: 1 value: 1 size: (...)__proto__: Set
s1;
//Set(1) {1}[[Entries]]0: 1 value: 1 size: (...) __proto__: Set
const s3 = new Set();
const s4 = new Set([]);
s3;
//Set(0) {}
//[]
s4;
//Set(0) {}
//[]

如果a = [1,2,3]
回到幂集函数上,第2行代码的powerSet[[]]
第1次外循环,aValue = 1,
第1次内循环,new Set(powerSet)[[]](把[]作为插入到新实例的元素),于是set为[]
而后第5行代码,new Set(set)等价于new Set([]),即[]。而后add(aValue)[1],而后powerSet[[],[1]]

幂集生成程序:

//以a = [1,2,3]
[[]]
[[],[1],[2],[1,2]]
[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理