用二进制实现集合:用整数中的每一位表示集合中的一个元素,如果整数第i位为1,表示整数i在集合中。
用二进制表示集合的好处不言而喻,高效、简单,而且用一个整数来表示一个集合,不同集合对应的整数肯定也不一样。
当用二进制表示集合时,因为二进制中存储的都是整型非负数,所以,如果一个集合中的元素不是非负数,那么只有找方法将它们映射到非负整数上,比如集合s,内容是“a,b,c,d,e”,为了让集合中的元素与整数一一对应,可以这样处理:int i = s[i] -‘a’。
将集合中每个元素转化为整数后,再对这些整数用二进制进行表示。
举个简单的例子:
设集合s = 0; //此时集合s为空
bool JudgeIn(int i){ //判断i是否在集合s中
return s & (1
}
//如果集合中原来有i,现在就会把i从集合中去掉,如果集合中原来没有i,现在就会把i加入集合
void RemoveEle(int i){
s = s ^ (1
}
//判断两个集合是否相同
void Equal(int s1 , int s2){
return s1 == s2;
}
以后有时间会详细举几个二进制表示集合的经典应用,大家会看到二进制表示集合的巨大威力。
山猫,一个专注于高级计算机技术分享的团队。
如果大家有什么问题或技术需求,可以后台留言或加山猫小墨的微信(二维码在页面底部)。
小墨简介:资深白帽,国内某互联网公司研发负责人,现从事机器学习、神经网络相关算法研究。
领取专属 10元无门槛券
私享最新 技术干货