1

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

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

4

2 回答 2

5

标准System.Random类使用(有符号的)32 位整数作为种子和值,期望它在大约 20 亿个样本后循环。

于 2011-11-15T21:08:16.250 回答
4

您可以使用System.Security.Cryptography.RandomNumberGenerator来获取随机数块以进行强加密。对于您的目的,这应该是足够的随机性。

其他文档可在http://msdn.microsoft.com/en-us/library/system.security.cryptography.randomnumbergenerator.aspx找到

经过快速基准测试后,我发现我能够在 28 毫秒内生成 400 万字节的随机数据,并在 2.5 秒内生成 4 亿字节。这产生了一个字节数组,可以连接到 aBinaryReader以获得您需要的任何基本数据类型。

于 2011-11-15T21:09:19.023 回答