我正在做一个项目,涉及从一组中抽取数百万随机样本作为启发式的一部分,以找到旅行商问题的最佳路径。
我需要一个随机发生器,其“随机性”在那么多样本之后不会耗尽。
它也应该快速,尽可能随机
在这种情况下使用的最佳随机发生器是什么?
(我知道,C#不是旅行推销员的最佳语言,但这是要求:))。
编辑:为了澄清我的意思,UNIX系统中的/ dev / random是一个基于熵的生成器。这就是您必须移动鼠标以生成SSH密钥的原因:它使用的随机数生成器基于用户输入来生成熵。简而言之,我需要一个良好的随机数生成器,它是基于种子的,而不是基于熵的。我不知道Random类是基于种子还是基于熵。此外,我想知道其他类是否使用比Random类更好的方法(我假设使用线性同余)。
答案 0 :(得分:5)
标准System.Random
类使用(带符号)32位整数作为种子和值,期望它在20亿个样本之后循环。
答案 1 :(得分:4)
您可以使用System.Security.Cryptography.RandomNumberGenerator
获取强加密的随机数字块。这应该是足够的随机性。
可以在http://msdn.microsoft.com/en-us/library/system.security.cryptography.randomnumbergenerator.aspx
找到其他文档经过快速测试后,我发现我能够在28ms内生成400万字节的随机数据,在短短的2.5秒内就可生成4亿字节的随机数据。这产生了一个字节数组,可以连接到BinaryReader
以获得您需要的任何基本数据类型。