class Bitmap(object): def __init__(self, max): self.size = self.calcElemIndex(max, True) self.array = [0 for i in range(self.size)] def calcElemIndex(self, num, up=False): '''up为True则为向上取整, 否则为向下取整''' if up: return int((num + 31 ) / 31) #向上取整 return num / 31 def calcBitIndex(self, num): return num % 31 def set(self, num): elemIndex = int(self.calcElemIndex(num)) byteIndex = self.calcBitIndex(num) elem = self.array[elemIndex] self.array[elemIndex] = elem | (1 << byteIndex) def clean(self, i): elemIndex = int(self.calcElemIndex(i)) byteIndex = self.calcBitIndex(i) elem = self.array[elemIndex] self.array[elemIndex] = elem & (~(1 << byteIndex)) def test(self, i): elemIndex =int(self.calcElemIndex(i)) byteIndex = self.calcBitIndex(i) if self.array[elemIndex] & (1 << byteIndex): return True return False MAX = 879 suffle_array = [45, 2, 78, 35, 67, 90, 879, 0, 340, 123, 46] result = [] bitmap = Bitmap(MAX) for num in suffle_array: bitmap.set(num) for i in range(MAX + 1): if bitmap.test(i): result.append(i) print ('原始数组为: %s' % suffle_array) print ('排序后的数组为: %s' % result)
Python位图索引学习
原文作者:时间:2018-07-28 15:20:48
原文地址: http://blog.itpub.net/29254281/viewspace-2168559/
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
原文地址: http://blog.itpub.net/29254281/viewspace-2168559/
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。