更新时间:2022-10-25 19:16
在计算机、通信系统,密码学中,在处理有些问题时,我们无法做到真正的随机,引入某些物理噪声的方法来实现无周期的随机,一般称为伪随机。伪随机方式是指利用伪随机解决问题的方式。例如在计算机中利用伪随机方式去挑选整数,它能消除线性再散列中所产生的堆聚问题。
在计算机、通信系统,密码学中,在处理有些问题,我们无法做到真正的随机,引入某些物理噪声的方法来实现无周期的随机,一般称为伪随机。伪随机方式是指利用伪随机解决问题的方式。例如在计算机中利用伪随机方式去挑选整数,它能消除线性再散列中所产生的堆聚问题。
最大周期性倒数
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(); // 初始化随机数