10.00_位运算
位运算
基本操作
基本位运算包含了处理二进制位的基本操作。
特点
- 时间复杂度:
- 空间复杂度:
- 适用于二进制位操作和状态压缩
分类
与 | & | 两位都为1时结果为1 |
或 | | | 至少一位为1时结果为1 |
异或 | ^ | 两位不同时结果为1 |
取反 | ~ | 0变1,1变0 |
左移 | << | 左移n位,末尾补0 |
右移 | >> | 右移n位,开头补符号位 |
位运算技巧
位运算技巧是一些常用的位操作组合。
特点
- 时间复杂度:
- 空间复杂度:
- 适用于快速计算和状态判断
分类
lowbit | x & -x | 获取最低位的1 |
清零 | x & (x-1) | 清除最低位的1 |
判断2的幂 | x & (x-1) == 0 | 判断是否为2的幂 |
统计1的个数 | 内置函数 | 计算二进制中1的个数 |
状态压缩
状态压缩是使用二进制位表示状态的技术。
特点
- 时间复杂度:与具体问题相关
- 空间复杂度:
- 适用于状态表示和动态规划
分类
集合表示 | 表示子集状态 | 位表示元素存在 |
状态转移 | 状态间的转换 | 位运算更新状态 |
状态枚举 | 枚举所有状态 | 位运算生成状态 |
应用场景对比
基本操作适合:
- 二进制位处理
- 快速计算
- 标志位操作
- 权限控制
位运算技巧适合:
- 特殊值判断
- 状态检测
- 快速统计
- 优化计算
状态压缩适合:
- 集合表示
- 状态转移
- 组合优化
- 动态规划
选择建议
- 需要处理二进制位时使用基本操作
- 需要快速计算时使用位运算技巧
- 需要表示状态时使用状态压缩
- 状态数较少时考虑状态压缩
- 需要优化性能时考虑位运算
牛客代码笔记-牛栋 文章被收录于专栏
汗牛充栋,学海无涯。<br/> 内含算法知识点讲解,以及牛客题库精选例题。<br/> 学习算法,从牛栋开始。