集合的子集枚举

子集的枚举有三种方法:数组

1.二进制法:这种方法最为简便 就是直接遍历数字 咱们看每一个数字的二进制 若是当前位为1 表示此在集合中 反之不在spa

固然 二进制还支持 集合的模拟操做 好比集合的合并 用| ;集合的交 用 & ;集合的对称差  (A-B)并(B-A) 用^;递归

2.递归枚举(位向量法)遍历

  咱们用 vis[n]数组 来打标记 表示这一位的数字 是否选入集合 这种作法的复杂度是2的n+1次方 由于必须枚举完n位选择才能够 因此解答树的总点数为2的n+1次方。二进制

递归枚举(增量构造法)方法

 这个方法的思想是在已有的集合下 增长新的元素 为了集合枚举的不重不漏  咱们集合

能够记录当前集合中全部元素在原数组中的最大坐标 以后从这个坐标向后增长新的元素便可vi

这个复杂度为2的n次方 由于每一个递归的层都输出 一个集合 因此解答树的节点个数为全部的集合总数 为2的n次方数字