2024-05-23 17:19:19 发布
网友
我想洗牌一个相对较长的数组(长度~400)。虽然我不是一个密码学专家,但我知道使用一个周期小于400!的随机数生成器将限制可以生成的可能排列的空间。在
400!
我尝试使用Python的random.SystemRandom数字生成器类,在Windows中,它使用CryptGenRandom作为它的RNG。在
random.SystemRandom
CryptGenRandom
RNG
有比我聪明的人知道这个数字发生器的周期是多少吗?这个实现有可能到达整个可能的置换空间吗?在
你几乎是对的:你需要一个周期不是400的发电机!,但内部状态大于log2(400!)位(周期也将大于400!,但后一个条件是不够的)。所以至少需要361字节的内部状态。CryptGenRandom不符合条件,但它应该足以生成361个或更多字节,以便为更好的生成器生成种子。在
我认为Marsaglia有1024和4096字节状态的MWC版本。在
你几乎是对的:你需要一个周期不是400的发电机!,但内部状态大于log2(400!)位(周期也将大于400!,但后一个条件是不够的)。所以至少需要361字节的内部状态。CryptGenRandom不符合条件,但它应该足以生成361个或更多字节,以便为更好的生成器生成种子。在
我认为Marsaglia有1024和4096字节状态的MWC版本。在
相关问题 更多 >
编程相关推荐