【发布时间】:2014-03-11 18:48:39
【问题描述】:
我想在 (0..."MAX") 范围内生成随机数。我想制作一个循环,这样每次循环都会生成一个新的唯一随机数(不应重复)。循环将继续总共“MAX”次。总共应该有“MAX”个随机数。排序时,值应为 0..."MAX";没有重复。
限制: - 假设 MAX 远大于 int。 (没有内存可以将所有数字排列存储在内存中)
我提出的解决方案: 如果我从 0...MAX 为生成器播种,是否可以像下面的函数一样打印 0 到 MAX 之间的每个唯一数字?假设没有空间来存储所有数字并打乱它们。
for x in range (0, MAX):
random.seed(x)
num=random.randint(0, MAX)
print("seed = ",x, " random number = ", num)
如果上面的答案是肯定的,那么这一代是可逆的(我可以从随机数中得到种子)吗?在哪种情况下,如果种子(密钥)和范围长度相同,这将被视为一种分组密码?
【问题讨论】:
-
你能解释一下你想要什么输出吗?您的代码无效,因为
randint需要参数。此外,您的代码中的任何内容都不会阻止重复。为什么每次迭代都要重新播种生成器? -
Tnx。固定的。我希望每次迭代都有一个 0...Max 范围内的新随机数,并且它不能与以前的数字重复。我正在播种,因为我猜测唯一的种子意味着 PRG 的第一次迭代的唯一编号,但我不知道 prg 在重复之前将采用的最大种子是多少。假设没有存储所有数字的内存。
-
“考虑了一种分组密码” - 如果您打算将其用于任何类型的加密目的,不要。
-
只是用它来生成非重复随机,但很好奇它是否符合分组密码的描述。
-
你对“随机性”有什么要求?它是否必须足够好才能进行模拟?密码学?它只需要不重复吗?
MAX有多大?