同样是刚才的例子,我们给出“90后”用户的Bitmap,再给出一个全量用户的Bitmap 。最终要求出的是存在于全量用户,但又不存在于“90后”用户的部分 。
![用什么算法可以快速检索数据?Bitmap了解一下](http://img.jiangsulong.com/220430/0I6245D1-11.jpg)
文章插图
实现方式长度计算公式
int nSize = (width * bitPixel + 64) / 64 ;
(高效写法是(((width * bitPixel + 64)>>6)) )
【用什么算法可以快速检索数据?Bitmap了解一下】通过位移操作,可以很方便的扩容
而且越往上就是指数扩容,满足过亿级别数据量的时间复杂度也是O(1)
class MyBitmap:def __init__(self,size):self.words=[0]*(self.get_word_index(size-1)+1)self.size=sizedef get_bit(self,bit_index):if bit_index<0 or bit_index>self.size-1:raise Exception("超过Bitmap有效范围!")word_index=self.get_word_index(bit_index)return (self.words[word_index]&(1<<bit_index))!=0def set_bit(self,bit_index):if bit_index<0 or bit_index>self.size-1:raise Exception("超过Bitmap有效范围!")word_index=self.get_word_index(bit_index)self.words[word_index] |=(1<<bit_index)def get_word_index(self,bit_index):#右移6位,相当于除以64return bit_index>>6bitMap=MyBitmap(128)bitMap.set_bit(126)bitMap.set_bit(75)print(bitMap.get_bit(126))print(bitMap.get_bit(78))
推荐阅读
- 为什么诸葛亮娶个丑媳妇儿?诸葛亮的妻子是四大丑女之一吗
- GeoHash 算法
- excel如何用公式筛选出自己想要的部分-公式只计算筛选后的数据-_1
- 三国李严儿子为什么帮诸葛亮?李严和诸葛亮有矛盾吗
- 计算机中为什么要用补码运算?
- Excel制作一个计分器
- 使用WebRTC和WebVR进行VR视频通话
- 脸上长痘痘喝什么茶排毒,脸上长痘痘喝什么茶比较好
- 木槿花茶的副作用,玫瑰花茶的副作用
- 为什么喝菊花茶性功能下降,喝什么菊花茶好