集合的整数表示
当元素较少时,可以使用二进制码来表示集合。集合
像这样表示之后,一些集合运算可以对应地写成如下方式。
- 空集
——0 - 只含有第
个元素的集合 —— - 含有全部
个元素的集合 —— - 判断第
个元素是否属于集合 ——if( S>>i&1 )
或if(S & (1<<i))
- 向集合
加入第 个元素 ——S |= 1<<i
- 从集合
中去除第 个元素 ——S&~(1<<i)
- 集合
和集合 的交集 ——S&T
- 集合
和集合 的并集 ——S|T
- 切换第
i
位 ——S ^= 1<<i
- 判断某状态是否有相邻的两者相同 ——
if( S & S<<1 )
- 把一个数字二进制下最靠右的第一个 1 去掉 ——
S = S&(S-1)
此外,想要将集合 {0,1,….,n-1} 所有子集枚举出来的话,可以像下面这样写
1 | for(int S=0; S < 1<<n; S++) |
Gitalk 加载中 ...