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

本文关键字:是什么 随机 | 更新日期: 2023-09-27 18:14:38

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

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

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

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

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

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

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