我正在尝试生成所有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
另外,我如何计算生成它们所需的大致时间?
我愿意使用任何编程语言,只要我可以将它们保存到输出文件中。
答案 0 :(得分:1)
嗯... 16 ^ 16 = 1.8446744e + 19,所以假设您可以计算每纳秒10个值(这是一个10GHz的速率btw)。然后你需要16 ^ 16/10纳秒来计算它们全部,或58。4年。此外,如果你能以某种方式将每个值压缩为1位(这是不可能的),则需要2艾字节的内存来包含这些值(16 ^ 16/8/2 ^ 60)。
答案 1 :(得分:0)
这似乎是一种非常人为的运动。是作业,还是有理由生成这个列表?这将是非常长的(见其他答案)!
话虽如此,你应该问问自己:为什么会这样?答案是Python 2.x 中的,range
生成一个实际的列表。如果你想避免这种情况,你可以:
range
实际上不是列表,而是一个特殊的类生成器对象。xrange
,它也不会实际制作列表,但会再次生成一个对象。至于时间,所有时间都是写入文件或屏幕。你可以通过制作一个更小的列表然后做一些数学来得到估计,但是你必须要小心,它足够大,以便通过写行来控制时间,而不是打开和关闭文件。 / p>
但你也应该问自己,结果文件有多大......你可能不喜欢你找到的东西。也许你的意思是2 ^ 16?