集合的子集枚举

来源:互联网 发布:人民日报图文数据库 编辑:程序博客网 时间:2024/06/05 15:54

子集的枚举有三种方法:

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

当然 二进制还支持 集合的模拟操作 比如集合的合并 用| ;集合的交 用 & ;集合的对称差  (A-B)并(B-A) 用^;

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

  我们用 vis[n]数组 来打标记 表示这一位的数字 是否选入集合 这种做法的复杂度是2的n+1次方 因为必须枚举完n位选择才可以 所以解答树的总点数为2的n+1次方。

递归枚举(增量构造法)

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

可以记录当前集合中所有元素在原数组中的最大坐标 之后从这个坐标向后增加新的元素即可

这个复杂度为2的n次方 因为每个递归的层都输出 一个集合 所以解答树的节点个数为所有的集合总数 为2的n次方

原创粉丝点击