【集合的二进制表示】
● 01 串(二进制串)与集合之间存在天然的对应关系。对应机理为每个二进制位可以表示集合中一个元素的存在(1)或不存在(0)。例如,集合 {a, b, c} 的子集 {a, c} 可以表示为 101(假设顺序为 a、b、c),全集表示为 111,空集表示为 000。
● 集合的二进制表示是一种非常直观且高效的方式,尤其适用于有限集合的子集枚举或状态压缩。
● 一个长度为 n 的二进制串可以表示 2^n 个子集。例如:n=3 时,有 000、001、010、011、100、101、110、111 共8个子集。
【集合运算与位运算】
交集 → a & b(按位与)
并集 → a | b(按位或)
对称差集 → a ^ b(按位异或)
差集 → a & (~b)
【bitset
与集合的关系】
bitset 是一种固定大小的二进制位容器,每个位表示集合中元素的存在(1)或不存在(0)。
#include <bits/stdc++.h>
using namespace std;
int main() {
bitset<8> setA("11001100"); //{2,3,6,7}
bitset<8> setB("10101010"); //{1,3,5,7}
cout<<(setA & setB)<<endl; //10001000
cout<<(setA | setB)<<endl; //11101110
cout<<(setA ^ setB)<<endl; //01100110
cout<<(setA & ~setB)<<endl; //01000100
return 0;
}