注这里的集合是有序的与数学中的集合并不一样
设”集合“A为 $A=\left \{ a,b,c,d,e\right \}$ 我们假设这里的集合是有序的,用A[i]代表A的第i个元素,如A[1] = a,A[5] = e
子集的个数
集合的的子集个数为$C=2^n$
集合的的真子集个数为$C=2^n-1$
集合的的非空子集个数为$C=2^n-1$
集合的的非空真子集个数为$C=2^n-2$
子集的二进制表示
我们可以用$(a)_{bin} = 11111,a=31$表示A这个集合表示A[1],A[2],A[3],A[4],A[5]这5个元素都有,如果是$(a_{1})_{bin} = 00011=11,a_{1} = 3$则表示$A_{1} = \left \{ d,e\right \}$这个子集,类似的其他子集。这样我们就可以用一个数来唯一对应一个集合对应位置的元素是否存在。
集合二进制表示的方法
既然我们知道了集合可以使用唯一的一个二进制数来表示该集合对应位置的元素是否存在,那么我们就来探讨一下一些特殊的集合怎么用二进制表示。
设一个集合为S,那么S的二进制表示记为$a_{S}$
空集
很显然空集什么元素都没有那么他的二进制表示就是$a_{\phi}=0$
全集
全集就是所有元素都有那么就是假设这个集合的元素个数是n,那么二进制表示就是n个1,设全集为S,那么$a_s=111...1(n个1)=(1<<n)-1$
只包含第i个元素的子集
可以用位运算1<<(i-1)来表示
集合之间的关系的二进制表示
交集
对于所有的既属于A又属于B的元素组成的集合,这种逻辑关系刚好就是我们的与运算,那么二进制中的交运算其实就是与运算即$a_A \& a_B$
并集
对于任意一个元素属于A或者属于B组成的集合,这种逻辑关系刚好就是我们的或运算,那么二进制中的并运算其实就是与运算即$a_A | a_B$
包含
任意一个属于A的元素一定属于B,则称A包含于B,那么我们可以翻译为$A \cap B=A\;and\;A\cup B=B$ 那么二进制中的包含关系可以写成$(a_A\&a_B==a_A)\&\&(a_A|a_B==a_B)$
判断是否属于
一个元素在某个集合中,可以看作是当个元素的集合包含于某个集合中,那么在二进制中属于关系就可以表示为$((1<<n)-1)\&(1<<(i-1))$
补集
补集:A是B的一个子集,由S中所有不属于A的元素组成的集合叫做补集,设B是A的补集,这种关系可以总结为属于A就不属于B,属于B就不属于A,这种逻辑关系刚好就是我们的的异或运算,那么$a_B=a_A \oplus a_S$