伪随机方式

更新时间:2022-10-25 19:16

在计算机、通信系统,密码学中,在处理有些问题时,我们无法做到真正的随机,引入某些物理噪声的方法来实现无周期的随机,一般称为伪随机。伪随机方式是指利用伪随机解决问题的方式。例如在计算机中利用伪随机方式去挑选整数,它能消除线性再散列中所产生的堆聚问题。

定义

在计算机、通信系统,密码学中,在处理有些问题,我们无法做到真正的随机,引入某些物理噪声的方法来实现无周期的随机,一般称为伪随机。伪随机方式是指利用伪随机解决问题的方式。例如在计算机中利用伪随机方式去挑选整数,它能消除线性再散列中所产生的堆聚问题。

方式

从计算机层面来分析,伪随机方式可以分为软件伪随机方式和硬件伪随机方式

软件伪随机方式

软件伪随机方式就是按照某种算法来实现伪随机来解决问题。常见的算法如下:

Blum-Micali算法

互补乘法

逆向同余发生器

ISAAC(密码)

滞后斐波纳契发电机

线性同余发生器 - 具有历史意义

线性反馈移位寄存器

最大周期性倒数

Mersenne Twister

中间方法

MIXMAX发生器

乘以携带

Naor-Reingold伪随机函数

Park-Miller随机数发生器

PCG

RC4 PRGA

硬件伪随机方式就是硬件实现伪随机来解决问题。以下是生产硬件随机数生成器的公司列表。

Araneus Alea

ComScire

熵键

Fox-IT FoxRandomCard

ID Quantique

英特尔810/815/840 / 845G芯片组

Intel RdRand指令

LETech

QuintessenceLabs

TectroLabs

RNG98

威盛挂锁发动机

BitBabbler

应用

在Java利用伪随机方式模拟福利彩票。

1)问题分析

福利彩票游戏中,中奖号码由 7 个基本号码组成,使用指定的专用摇奖器摇出。摇奖器内放置标有 01-35 的 35 个号码球,摇奖时依次摇出 7 个号码球,然后,依据设置相应的兑奖规则,(如 7 中 7 、 7 中 6 、 7 中 5 )等,进行兑奖。

2) 类定义

根据问题分析, 为该应用程序创建球类 Bull 、 游戏类 Game 与测试类TestGame 。

同样, 为了能在游戏应用程序中使用随机数, 需要导入 java.util 包的Random 类。 Bull 类定义球号码 point 以及显示球 displayBull 方法。 其中,displayBull 用于显示球号码对应的图片。 Game 类中 playGame 方法用于随机从 35 个球中“摇出” 7 个球,并需要考虑球号不能重复; ruleGame 方法用于设置兑奖规则。

3) 类实现

Game 类中 playGame 方法的关键代码如下:

public void playGame()

{int i=0;

int index =0;

for(i=0;i

{ranarray[i]=i+1;

}

for(i=0;i

{index = rand.nextInt(NumBull);

ran[i].setPoint( ranarray[index] );

ranarray[index]=ranarray[--NumBull];

}// 产生不重复的球号 }

其中,变量定义如下:

int NumBull = 35; // 定义总球数

int NumRoll = 7; // 定义中奖球数

Bull[] ran = new Bull[NumRoll]; // 定义中奖的球

private int[] ranarray = new int[NumBull]; // 总球的数组

public Random rand = new Random(); // 初始化随机数

免责声明
隐私政策
用户协议
目录 22
0{{catalogNumber[index]}}. {{item.title}}
{{item.title}}