我正在尝试生成所有的16^16,但是有一些问题。主要是记忆。我试图像这样在python中生成它们:
for y in range (0, 16**16):
print '0x%0*X' % (16,y)这给了我:
OverflowError: range()结果有太多项
如果我使用sys.maxint,我会得到一个MemoryError。
更准确地说,我想生成长度为16的HEX的所有组合,即:
0000000000000000
0000000000000001
0000000000000002
...
FFFFFFFFFFFFFFFF另外,如何计算生成它们所需的大致时间?
只要我可以将它们保存到输出文件中,我就可以使用任何编程语言。
发布于 2017-05-02 13:19:21
好吧..。16^16 = 1.8446744e+19,因此假设您可以计算出每毫秒10个值(这是一个10 that的速率)。然后用16^16 / 10纳秒来计算它们,也就是58.4年。此外,如果您可以以某种方式将每个值压缩为1位(这是不可能的),则需要2艾字节的内存来包含这些值(16^16/8/2^60)。
发布于 2017-05-02 13:18:26
这似乎是一种非常人工的锻炼。这是家庭作业,还是有理由产生这份清单?这将是非常长(见其他答案)!
话虽如此,你应该扪心自问:为什么会发生这种事?答案是,在Python2.x中,range生成一个实际的列表。如果你想避免这种情况,你可以:
range实际上并不列出一个列表,而是一个特殊的类似生成器的对象。xrange,它也不实际列出一个列表,但是再次生成一个对象。至于时间安排,所有的时间都将以书面形式提交给文件或屏幕。你可以通过做一个更小的列表,然后做一些数学来得到一个估计,但你必须小心,它足够大,时间被写行,而不是打开和关闭文件。
但你也应该问问自己得到的文件有多大.你可能不喜欢你发现的。也许你是说2^16?
https://stackoverflow.com/questions/43738797
复制相似问题