二進制下的集合運算


二進制下可方便進行集合的表示與運算

一、如何表示集合

二進制數的每一位代表了此處的開關狀態,以此來表示集合中元素的有無。
一些特殊集合的表示:全集 2^n-1, 空集 0 。

1.如何向集合中插入元素

若要插入第 n 號元素,只需向代表集合的二進制數加上 2^n 即可。

2.如何讀取集合中元素的有無

只需將二進制數按位與 1<<n。結果若為 1,即有元素;為 0,即無元素。
遍歷集合中的各元素只需每位按位與。

二、位運算與集合運算

利用位運算可方便快速的進行集合運算。

A B A&B A|B A^B
二進制 10110 01100 00100 11110 11010
集合 {1, 2, 4} {2, 3} {2} {1, 2, 3, 4} {1, 3, 4}
操作 取交集 取並集 對稱差

三、示例

#include <cstdio>
const int n=5;
void output(int set){
for (int i=0; i<5; i++)
if (set & (1<<i)) printf("%d ", i+1);
}

int main(void){
int A=22, B=12;//A{2, 3, 5} B{3, 4}

printf("集合A: ");
output(A);
printf("\n集合B: ");
output(B);
printf("\nA&B: ");
output(A&B);
printf("\nA|B: ");
output(A|B);
printf("\nA^B: ");
output(A^B);
printf("\nA的補集: ");
output(((1<<5)-1)^A);
printf("\n");

return 0;
}

輸出結果:
集合A: 2 3 5
集合B: 3 4
A&B: 3
A|B: 2 3 4 5
A^B: 2 4 5
A的補集: 1 4


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com