伪随机数发生器(PRNG)

伪随机数发生器(PRNG) 指使用数学公式生成随机数序列的算法。PRNG生成一个近似随机数性质的数字序列。

null

PRNG使用 种子状态 .许多数字是在短时间内生成的,如果序列的起点已知,也可以在以后复制。因此,数字是 确定性和高效性 .

为什么我们需要PRNG?

随着计算机的出现,程序员认识到需要一种将随机性引入计算机程序的方法。然而,令人惊讶的是,由于计算机盲目地遵循给定的指令,因此完全可以预测,很难让计算机偶然地做某事。不可能从确定性的计算机中生成真正的随机数,所以PRNG是一种利用计算机生成随机数的技术。

PRNG是如何工作的?

线性同余产生器 是最常见也是最古老的生成伪随机数的算法。生成器由递归关系定义:

Xn+1 = (aXn + c) mod m
where X is the sequence of pseudo-random values
m, 0 < m  - modulus 
a, 0 < a < m  - multiplier
c, 0 ≤ c < m  - increment
x0, 0 ≤ x0 < m  - the seed or start value

我们使用前一个随机整数、整数常数和整数模生成下一个随机整数。首先,该算法需要初始种子,必须通过某种方式提供。随机性的出现是通过执行 模运算。 .

PRNG的特性

  • 高效: PRNG可以在短时间内生成多个数字,对于需要多个数字的应用是有利的
  • 确定性: 如果已知序列的起始点,则可以在以后复制给定的数字序列。如果你需要在以后的阶段再次重放相同的数字序列,决定论是很方便的。
  • 定期: PRNG是周期性的,这意味着序列最终会自我重复。虽然周期性很难成为理想的特征,但现代PRNG的周期很长,在大多数实际应用中可以忽略

PRNG的应用

PRNG适用于需要许多随机数的应用,并且可以方便地重放相同的序列。这类应用程序的常见例子有 仿真和建模应用 .PRNG不适用于数字确实不可预测的应用,例如 数据加密和赌博。

基于dsp的伪随机数发生器 srand()

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
srand ( time (NULL));
int i;
for (i = 0; i<5; i++)
printf ( "%d " , rand ()%10);
}


产出1:

3  7  0  9  8

产出2:

7  6  8  1  4

说明: srand()设置种子,rand()使用该种子生成随机数。 时间(空) 返回的秒数 1971年1月1日 i、 每次我们运行程序,我们都会有几秒钟的时间差,这会给程序带来新的种子。

广泛使用的PRNG算法 : 滞后斐波那契发生器 , 线性反馈移位寄存器 , 布卢姆·布卢姆·舒布 .

随机数测验

本文由 亚什·辛拉 .如果你喜欢GeekSforgek,并想贡献自己的力量,你也可以使用 贡献极客。组织 或者把你的文章寄到contribute@geeksforgeeks.org.看到你的文章出现在Geeksforgeks主页上,并帮助其他极客。

如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请写下评论。

© 版权声明
THE END
喜欢就支持一下吧
点赞5 分享