剧情提要:
阿伟看到了一本比较有趣的书,是关于《计算几何》的,2008年由北清派出版。很好奇
它里面讲了些什么,就来看看啦。
正剧开始:
星历2016年08月01日 10:17:09, 银河系厄尔斯星球中华帝国江南行省。
阿伟看到了一本比较有趣的书,是关于《计算几何》的,2008年由北清派出版。很好奇
它里面讲了些什么,就来看看啦。
正剧开始:
星历2016年08月01日 10:17:09, 银河系厄尔斯星球中华帝国江南行省。
[工程师阿伟]正在和[机器小伟]一起研究[计算几何]]。
Python的实现:
<span style="font-size:18px;">###
# @usage 比特集
# @author mw
# @date 2016年08月01日 星期一 08:06:58
# @param
# @return
#
###
class BitSet(object):
# from low to high "00000001 00000010 00000011", the array is [1, 2, 3]
def __init__(self, capacity = 64):
#"B"类型相当于 C 语言的 unsigned char, 即占用1byte(8位),所以size大小设置为8
self.unit_size = 8
self.unit_count = abs(math.floor((capacity + self.unit_size - 1) / self.unit_size));
self.capacity = capacity
self.arr = array.array("B", [0] * self.unit_count)
def any(self):
#是否存在置为 1 的位
for a in self.arr:
if a != 0:
return True
return False
def all(self):
#是否所有位都为 1, 即是否存在置为 0 的位
t = (1 << self.unit_size) - 1
for a in self.arr:
if (a & t) != t:
return False
return True
def none(self):
#是否所有位都为 0,即是否不存在置为 1 的位
for a in self.arr:
if a != 0:
return False
return True
#所有位为零为真
def isEmpty(self):
return self.none();
#至少一位为1,返回真
def intersects(self):
return self.any();
#位的数量
def length():
return self.size();
def __len__():
return self.size();
def size(self):
#所有位的个数
return self.unit_count * self.unit_size
def count(self):
#置为 1 的位的个数
c = 0
for a in self.arr:
while a > 0:
if a & 1:
c += 1
a = a>>1
return c
def get(self, pos):
#获取第 pos 位的值
index = int(pos / self.unit_size)
offset = (self.unit_size - (pos - index * self.unit_size