【性能优化】BitMap的使用:(1)创建BitMap (2)插入key到BitMap (3)删除key到BitMap (4)查询key是否存在于BitMap中

位图操作宏定义先列出来

/* 位图属性变量  */
#define BITMAP_STEP(bitMapType)	           (sizeof(bitMapType) * 8)
#define BITMAP_STEPNUM(uiMaxKey, step)     ((uiMaxKey + step -1) / step)
#define BITMAP_BITNUM(uiMaxKey, step)      (((uiMaxKey + step - 1) / step) * step)

/* 增加key到BitMap */
#define ADD_KEY(key, map, step)            (map[uiKey/uiStep] |= (1 << (key% step)))
#define ADD_KEY_SHIFT(key,map,step,shift)  (map[key>>shift] |= (1<<(key&(step-1))))

/* 删除key从BitMap */
#define DEL_KEY(key, map, step) 	   (pBitMap[key / step] &= (~(1 << (key % step))))
#define DEL_KEY_SHIFT(key,map, step,shift) (map[key>>shift] &= (~(1<<(key&(step- 1)))))

/* 查询key是否在BitMap中 */
#define KEY_EXIST(key, map, step)           (map[key / step] & (1 << (key % step)))
#define KEY_EXIST_SHIFT(key,map,step,shift) (map[key>>shift] & (1 << (key & (step- 1))))

正文:

BitMap就是位图, BitMap是个好数据结构, 尤其对大数据行业,搞清楚其原理后,会发现位图很easy.

先给出两个假设

(1)--->假设要处理的都是正整数,(负整数也可以搞定,做下特殊处理就可以,此文章忽略)

(2)--->假设申请位图内存类型为unsigned int

1.BitMap的bit总数有什么决定

bit总数由最大数N确定,而和数队列的长度无关!

比如队列:

    que1 = {1,2,3,4,5,6,5,4,3,2,1,2,2,10,3,4,5,6,7,8,6,5,4,3,2,1} 

    que2= {1,1024} 

que1对应的BitMap需要的Bit总数由最大数10确

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值