尽可能不重复的伪随机数生成器的高效实现
模仿 System.Random 提供的用户界面。可以从 System.Random 继承,也可以不。
1、尽可能不重复。含义是,Next 方法在没有达到必定会重复的时候,就不能重复。
比如,生成21-24之间(含21和24)的伪随机数,则生成前4个数不能重复,当然,第5个数不可避免会重复的。
NextDouble 方法也要求返回尽可能不重复的数,也就是说,在耗尽大于或等于 0.0 而小于 1.0 的双精度浮点数之前,不得重复。
NextBytes 方法则可以要求在数组长度小于或等于 byte.MaxValue+1 (也就是256)时,返回的数组元素不得重复。若数组长度大于256,则要求前256个元素不得重复。
2、随机性。我们知道,计算机不可能生成真正的随机序列,只能要求是伪随机序列。但我们可以要求这个序列不能有十分明显的规律,比如说,不能是等差数列、等比数列、斐波拿契数列,等等。
3、高效。要求实现尽量高效,这可能会和随机性发生矛盾。比如,是否要在内部保存已生成的序列,以判定是否重复。
以上抛砖引玉,还有很多方面都可以展开讨论。欢迎大家补充。
...全文
相关推荐
产生20个不重复的随机数的代码
产生20个不重复的随机数的代码,可以在随即选题时使用
MATLAB中MersenneTwister伪随机数生成器的实现与应用
Mersenne Twister算法因其高效性和高维均匀分布的伪随机数而闻名,广泛应用于科学计算、模拟测试和数据分析等领域。MATLAB作为强大的数学计算和工程仿真软件,内置了Mersenne Twister算法的实现,使其成为进行复杂模拟和大数据处理的理想工具。
LSFR伪随机数生成器_Vivado实现指南
线性反馈移位寄存器(Linear Feedback Shift Register,简称LSFR)是一种在数字系统设计中广泛应用的序列生成器,它通过反馈函数在每个时钟周期对寄存器中的位进行操作,生成重复但具有伪随机特性的序列。在HDL代码中,模块间的接口定义是通过端口(ports)来实现的。端口定义了模块输入和输出信号的类型和名称。通信则是在不同模块的端口间传递信号。以Verilog为例,模块间的接口定义和通信通常如下所示:input wire clk, // 时钟信号。
C#短时间内产生大量不重复的随机数
在C#编程中,经常会碰到产生随机数的情况,并且是在短时间内产生一组随机数。如果这组随机数中有大量重复的,则达不到我们的要求
C 库 返回均匀分布的伪随机数序列.rar
C语言实用源码


