从140秒到2秒的优化

Thursday, November 12th, 2009

从2亿个0~2,000,000,000之间的数字样本中找出不重复的记录总数,首先想到的是bloom filter,转念一想既然全都是数字,bloom filter有点太重,bitarray也许更有效,于是第一个版本出来,部分代码如下: ba = bitarray(212**4) cnt = 0 for i in data: if (not ba[i]): cnt += 1 ba[i] = True print cnt 大概需要140s左右,觉得if (not ba[i]):这个比较费,改了第二版: for i in data: ba[i] = True print ba.count() 速度有所提升,到了120s左右,开始打起多核运算的主意了,山寨了一个map-reduce,首先通过maper把数据按照除4得余分成4份: def maper(data): ...