# -*- coding: utf-8 -*-
'''
Python程序员面试算法宝典---解题总结: 第9章 大数据 9.4 如何在大量的数据中找出不重复的整数
题目:
在2.5亿个整数中找出不重复的整数,注意,内存不足以容纳这2.5亿个整数。
分析:
位图适用于查找非重复数据。
可以采用分治,设定一个哈希函数,将每个整数除以 hashValue,
得到模,例如取hashValue为10000
那么将取模结果为0的整数写入文件A0
...
将取模结果为9999的整数写入文件A9999
注意:
如果上述得到的文件有大小仍然大于限制内存的,继续用上述哈希方法继续划分,
直到每个小文件可以读入到内存中。
然后分别读取A0,...,A9999文件,对每个小文件,
用字典记录出现每个整数的出现次数,将出现次数为1的写入文件Bi,
...
读取每个文件Bi,则可以获得所有不重复的整数。
方法2:
由于2的32次方大约是42亿,2.5亿个整数
可以用2^32个bit,来表示,大约占据2^32bit = 4* 2^30bit=0.5GB左右内存。
这是每个数字占据1个bit位,现在每个整数需要占据2个bit位,来表示1个数字
是出现0次,1次还是多次。因此需要占据1GB
假设整数占用4B,可以用00表示数字没有出现过,01出现1次,10出现了多次,
11不用。
关键:
1 没有想到
位图中用2个bit,00表示数字没有出现,01表示出现1次,10表示出现多次。
参考:
Python程序员面试算法宝典
'''
def process():
pass
if __name__ == "__main__":
process()