bitmap是很常见的算法设计,例如用以Bloom Filter中;用以无反复整数金额的排列这些。bitmap一般根据数组来完成,数组中每一个原素能够当做是一系列二进制数,全部元素组成更高的二进制结合。针对Python而言,整数金额种类默认设置是有标记种类,因此 一个整数金额的能用十位数为31位。
bitmap完成构思
bitmap是用以对每一位开展实际操作。举例来说,一个Python数组包括4个32位系统有标记整形,则一共能用位为4 * 31 = 124位。假如要在第90个二进制位上实际操作,则要先获得到实际操作数组的第几个原素,再获得相对的位数据库索引,随后实行实际操作。
图中所显示为一个32位系统整形,在Python中默认设置是有标记种类,最大位为标记位,bitmap不可以应用它。左侧是上位,右侧是底位,最少位为第0位。
bitmap是用以对每一位开展实际操作。举例来说,一个Python数组包括4个32位系统有标记整形,则一共能用位为4 * 31 = 124位。假如要在第90个二进制位上实际操作,则要先获得到实际操作数组的第几个原素,再获得相对的位数据库索引,随后实行实际操作。
复位bitmap
最先必须复位bitmap。拿90这一整数金额而言,由于单独整形只有应用31位,因此 90除于31并向上取整则可获知必须好多个数组原素。编码以下:
编码以下:
#!/usr/bin/env python
#coding: utf8
class Bitmap(object):
def __init__(self, max):
self.size = int((max 31 – 1) / 31) #向上取整
if __name__ == ‘__main__’:
bitmap = Bitmap(90)
print ‘必须 %d 个原素。’ % bitmap.size
编码以下:
$ python bitmap.py
必须 3 个原素。
测算在数组中的数据库索引
测算在数组中的数据库索引实际上是跟以前测算数组尺寸是一样的。只不过是以前是对最大值测算,如今换为任一必须储存的整数金额。可是有一点不一样&#