前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >集合的整数表示

集合的整数表示

作者头像
灯珑LoGin
发布2022-10-31 14:27:04
3990
发布2022-10-31 14:27:04
举报
文章被收录于专栏:龙进的专栏

当集合的元素数比较少的时候,我们可以使用整数来表示集合(用到整数的二进制)

一些集合运算可以这么写:

  • 空集:0
  • 只含有第i个元素的集合{i}: 1<<i
  • 含有全部n个元素的集合{0, 1, …, n-1}: (1<<n)-1
  • 判断第i个元素是否属于集合S: if(S>>i&1)
  • 向集合中加入第i个元素:S|(1<<i)
  • 从集合中去除第i个元素:S&~(1<<i)
  • 集合S和T的并集:S|T
  • 集合S和T的交集:S&T

枚举集合S的所有子集

代码语言:javascript
复制
for( int S = 0; S < (1<<n); ++S)
{
     //对于集合的处理
}

枚举{0, 1, …, n-1}所包含的所有大小为k的子集

下面的代码根据字典序升序,枚举出所有满足条件的二进制码

代码语言:javascript
复制
int comb = (1<<k) - 1;
while(comb < (1<<n) )
{
    //这里进行针对组合的处理

    int x = comb & -comb;
    int y = comb + x;
    comb = (((comb & ~y) / x) >>1 ) | y;
}

转载请注明来源:https://www.longjin666.top/?p=1194

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021年9月17日2,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 枚举集合S的所有子集
  • 枚举{0, 1, …, n-1}所包含的所有大小为k的子集
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档