Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:散列大量的大数_Python_Dataset - Fatal编程技术网

Python:散列大量的大数

Python:散列大量的大数,python,dataset,Python,Dataset,我有一个大数据问题。我的python程序计算从1到2^32的数字,我想知道我是否已经计算了一个数字 我可以使用半GB的内存将它们作为位图进行跟踪。但是,由于有些数字可以和其他数字一起放在一个袋子里(每个袋子大约100个数字),我想知道是否有其他方法可以存储我的值,比如散列,但占用的内存更少 谢谢您的帮助。正如我在上面的评论中所说,您可以使用存储所有计算数字的集合。 当你计算一个新的数字时,你会检查它是否已经是集合 考虑计算是计算数字的函数 computedNumbers = set() #

我有一个大数据问题。我的python程序计算从1到2^32的数字,我想知道我是否已经计算了一个数字

我可以使用半GB的内存将它们作为位图进行跟踪。但是,由于有些数字可以和其他数字一起放在一个袋子里(每个袋子大约100个数字),我想知道是否有其他方法可以存储我的值,比如散列,但占用的内存更少


谢谢您的帮助。

正如我在上面的评论中所说,您可以使用存储所有计算数字的
集合。
当你计算一个新的数字时,你会检查它是否已经是集合

考虑<代码>计算<代码>是计算数字

的函数
computedNumbers = set()   # initialize set
for i in range(1, 2**32):    # for loop
    number = compute(i)
    if number in computedNumbers:
         print("Number", number, " is already computed!")
    else:
         computedNumbers.add(number)      # add the number to the set

希望这对您有所帮助。

如果我的计算正确,最多存储2^32/100个4字节的值将消耗超过170MB的RAM。我不喜欢在超过100MB的内存中搜索我的值,但是将它们组织在不同的列表中是一个巨大的优点。尝试使用间隔。例如,如果您已经计算了从
1
1000
的所有数字,并且在下一次迭代中,您计算了
800
,那么您只需检查这个数字是否在已经计算过的区间内。@AnnZen我认为使用
list
不是很有效,因为复杂性是
O(n)
。您可以使用
set
来达到
O(1)
的平均值,使用
中的
操作符。感谢您对间隔的想法,但我想这不会成功,因为我没有按顺序计算数字,我必须跟踪所有间隔,直到它们填满为止。您不需要
if
语句,
set()
将自动删除重复项。@AnnZen是的,我知道!实际上,我添加了
if
,以防他想
print
或者做一些事情,如果同一个数字被多次计算。谢谢你,我只是没有想到集合,因为我的1位值转换成32位值。但是,由于我在位图方法中每个数字使用大约100位,所以每个数字只使用32位是很好的。“我会试试看。”若你们觉得合适的话,别忘了接受答案。