伪随机方式
计算机学术语
在计算机、通信系统,密码学中,在处理有些问题时,我们无法做到真正的随机,引入某些物理噪声的方法来实现无周期的随机,一般称为伪随机。伪随机方式是指利用伪随机解决问题的方式。例如在计算机中利用伪随机方式去挑选整数,它能消除线性再散列中所产生的堆聚问题。
定义
在计算机、通信系统,密码学中,在处理有些问题,我们无法做到真正的随机,引入某些物理噪声的方法来实现无周期的随机,一般称为伪随机。伪随机方式是指利用伪随机解决问题的方式。例如在计算机中利用伪随机方式去挑选整数,它能消除线性再散列中所产生的堆聚问题。
方式
从计算机层面来分析,伪随机方式可以分为软件伪随机方式和硬件伪随机方式
软件伪随机方式
软件伪随机方式就是按照某种算法来实现伪随机来解决问题。常见的算法如下:
Blum-Micali算法
互补乘法
逆向同余发生器
ISAAC(密码)
滞后斐波纳契发电机
线性同余发生器 - 具有历史意义
最大周期性倒数
Mersenne Twister
中间方法
MIXMAX发生器
乘以携带
Naor-Reingold伪随机函数
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(); // 初始化随机数
最新修订时间:2022-10-25 19:16
目录
概述
定义
方式
参考资料