什么是C#最好的无熵随机生成器?

时间:2011-11-15 21:04:11

标签: c# random-sample

我正在做一个项目,涉及从一组中抽取数百万随机样本作为启发式的一部分,以找到旅行商问题的最佳路径。
我需要一个随机发生器,其“随机性”在那么多样本之后不会耗尽。
它也应该快速,尽可能随机 在这种情况下使用的最佳随机发生器是什么?
(我知道,C#不是旅行推销员的最佳语言,但这是要求:))。

编辑:为了澄清我的意思,UNIX系统中的/ dev / random是一个基于熵的生成器。这就是您必须移动鼠标以生成SSH密钥的原因:它使用的随机数生成器基于用户输入来生成熵。简而言之,我需要一个良好的随机数生成器,它是基于种子的,而不是基于熵的。我不知道Random类是基于种子还是基于熵。此外,我想知道其他类是否使用比Random类更好的方法(我假设使用线性同余)。

2 个答案:

答案 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以获得您需要的任何基本数据类型。