当前位置: 首页 > news >正文

【C++干货分享】集合 位运算

//笔记来源:

分享|从集合论到位运算,常见位运算技巧分类总结! - 力扣(LeetCode)


将整数集合用二进制形式表示:

long long s = 10000100100;//用二进制形式表示的一个整数集合

构造原理:第 位为1 <=> 整数集合s中含有元素 i

干货

  • -1 的二进制表示是 111...1111

所以有 -1 & s = s

  • 关于 sub - 1的解读

对于二进制数sub, sub - 1的二进制 相当于 将sub二进制的最低位的 1变成0,并将上述 1右边的所有0变成 1

原理: ^{2^{i}} = \sum_{0}^{i-1}^{2^{k}}

遍历集合的技巧

遍历所有非空子集

for(long long sub=s; sub; sub = (sub-1) & s)
{
		// 解释:关于(sub-1) & s
		//sub-1 可以每次将最低位的 1变成0,并将上述 1右边的所有0变成 1
		//&s 的操作保证了结果中的元素必然仍然是s中的元素,即结果一定是s的子集
)

遍历所有子集(含空集)

long long sub = s;
do{
    //
    sub = (sub-1) & s;
}while(sub != s)

相关文章:

  • AI-TRANS标准草案框架解析
  • STL中list的模拟实现
  • 145,【5】 buuctf web [GWCTF 2019]mypassword
  • 分布式 NewSQL 数据库(TiDB)
  • 基于大数据的北京市天气数据分析系统的设计与实现
  • 【C++】31.C++11​(3)
  • ShenNiusModularity项目源码学习(8:数据库操作)
  • unity学习40:导入模型的 Animations文件夹内容,动画属性和修改动画文件
  • C# Task 学习记录
  • 3、树莓派5 安装VNC查看器 开启VNC服务器
  • linu软件编程——IO
  • 2月15日星期六今日早报简报微语报早读
  • React - 高阶函数-函数柯里化
  • 2015-2024年上市公司商道融绿esg评级数据
  • 寒假刷题Day24
  • Word正文中每两个字符之间插入一个英文半角空格
  • 服务器虚拟化(详解)
  • 枚举Enum用法
  • ros:ur机械臂初识
  • 基于STM32的智能垃圾分类回收系统
  • 做网站工资高吗/网站怎么做推广
  • 公司网站开发之main区域(2)/报个计算机培训班多少钱
  • 西安专业房产网站建设/外贸网站免费推广
  • 头条网站怎么做/外链发布平台有哪些
  • 直播类网站开发/网络营销个人感悟小结
  • 商城网站建设要求/seo引擎优化工具