集合的二进制整数表示

55 篇文章 2 订阅

在程序中表示集合的方法有很多种,当集合中的元素个数较小时候,可以用二进制来表示,每一个二进制转换成十进制的整数可以唯一的表示一个集合。这个技巧也在算法竞赛中经常用到。

博客链接:https://www.cnblogs.com/hdwang/p/6234931.html

 

比如有一个集合{0,1,2…n-1}

那么我们可以进行如下操作:

空集.............................0
只含有第i个元素的集合{i}............1<<i
含有全部n个元素的集合{0,1...n-1}....(1<<n)-1//含有n个元素的全集
判断第i个元素是否属于集合S...........if(S>>i&1)
向集合中加入第i个元素S∪{i}..........s|1<<i
从集合中取出第i个元素...............s&~(1<<i)
集合S和T的并集S∪T.................S|T
集合S和T的交集S∩T.................S&T

比如 只含有第i个元素的集合为什么可以表示成1<<i

举个例子 比如只含有第2个元素的集合 那么 1<<2=2^2 二进制表示就是100   第0个元素没有 因为在第0位置为0 第1个元素没有因为在第1位置为0 第2个元素为1 表示有第二个元素 所以就这样表示(它是倒着来的)。

比如  含有全部n个元素的集合{0,1...n-1}....(1<<n)-1//含有n个元素的全集

举个例子 含有全部3个元素的集合 {0,1,2}   那么(1<<3)-1 = 7=111(二进制)    是不是对应二进制位置都为1

比如 判断第i个元素是否属于集合S...........if(S>>i&1)

举个例子 比如一个集合s{1 2 3}  判断它的第2个元素是否属于s 将它的二进制111 右移2位得到001 与1位与 得到1 说明第二个元素属于集合s。

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值