奇计淫巧______bitset优化

本文介绍bitset的基本用法及其在数组操作中的优化应用,如快速实现位运算及常数级优化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

bitset


可以当作一个bool型数组考虑,bitset<N> bs;  可以考虑成一个数组bool bs[N]。


相关操作:


bs.set(); 全部置1,bs.reset()全部置0;


bs.set(pos);等价于bs[pos]=1,bs.reset(pos)等价于bs[pos]=0;


最重点的来了,bitset<N> a, b;


!a //按位取反
a^b //按位异或
a|b //按位或
a&b //按位与
a=b<<3 //整体移位
a.count(); //a中1的个数

bitset优化有什么用呢


如果有一个bool数组 a[N] 和b[N] 把每一个位异或的话,一定是

for (int i = 0; i < N; ++i) c[i] = a[i] ^ b[i];


但是如果用bitset直接a^b的话,只需要O(N/机器字节数)


这样可以实现常数优化。


bitset种在计算机科学中用于存储二进制数据的数据结构,通常表现为个固定大小的数组,每个元素代表位状态。在深度优先搜索(DFS)算法中,可以利用bitset来高效地表示和跟踪已经访问过的节点。以下是几种-bitset优化DFS的方法: 1. **空间效率**:bitset相比列表存储节省空间,因为只需要对每个节点是否访问过用个比特位表示,而不是为每个节点分配单独的空间。 2. **快速判断**:通过位操作(如按位与运算),我们可以迅速检查某个节点是否已经被访问过,无需遍历整个列表查找。 3. **减少开销**:由于bitset的操作速度非常快,可以在常数时间内完成,所以可以减少频繁的内存访问次数,提高性能。 4. **次性处理**:如果需要对所有节点进行搜索,bitset可以在次操作中设置或清除多个状态,而无需多次循环。 例如,在使用Python的`numpy`库中的`bitwise_and`函数来进行逐位与操作,可以帮助我们在DFS过程中跟踪路径。下面是个简单的例子: ```python import numpy as np def dfs(graph, start, visited = [False] * len(graph)): # 初始化bitset with all nodes unvisited bitset = np.uint8(np.zeros(len(graph), dtype=np.bool)) stack = [start] while stack: node = stack.pop() if not visited[node]: visited[node] = True stack.extend([neighbor for neighbor in graph[node] if not bitset[neighbor]]) # 更新bitset,标记已访问邻居 bitset |= 1 << node return visited ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值