集合的子集枚举

子集的枚举有三种方法:

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

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

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

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

递归枚举(增量构造法)

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值