随机化算法——随机数类代码

来源:互联网 发布:按键精灵 数组直接赋值 编辑:程序博客网 时间:2024/06/05 09:43

一、随机数 

  随机数在概率算法设计中扮演着十分重要的角色。在现实计算机上无法产生真正的随机数,因此在概率算法中使用的随机数都是一定程度上随机的,即伪随机数

线性同余法是产生伪随机数的最常用的方法。由线性同余法产生的随机序列a0,a1,…,an满足

  其中b >= 0,c >= 0,d <= m。d称为该随机序列的种子。如何选取该方法中的常数b、c和m直接关系到所产生的随机序列的随机性能。这是随机性理论研究的内容,已超出本书讨论的范围。从直观上看,m应取得充分大,因此可取m为机器大数,另外应取gcd(m, b) = 1,因此可取b为一素数

二、源代码

//RandomNumber.h

const unsigned long maxshort = 65535L;const unsigned long multiplier = 1194211693L;const unsigned long adder = 12345L;#ifndef RANDOMNUMBER_H_INCLUDED#define RANDOMNUMBER_H_INCLUDEDclass RandomNumber{private:    unsigned long randSeed;public:    // 构造函数,默认值0表示由系统自动产生种子    RandomNumber(unsigned long s = 0);    // 产生0 ~ n-1之间的随机整数    unsigned short Random(unsigned long n);    // 产生[0, 1) 之间的随机实数    double fRandom();};#endif // RANDOMNUMBER_H_INCLUDED

//RandomNumber.cpp

#include "RandomNumber.h"#include <iostream>#include <stdlib.h>#include <time.h>using namespace std;//产生种子RandomNumber::RandomNumber(unsigned long s){    if(s == 0)        randSeed = time(0);    else        randSeed = s;}// 产生0 ~ n-1 之间的随机整数unsigned short RandomNumber::Random(unsigned long n){    randSeed = multiplier *randSeed + adder;    return(unsigned short)((randSeed >> 16)% n);}//产生[0,1)间的随机数double RandomNumber::fRandom(){    return Random(maxshort)/double(maxshort);}


0 0
原创粉丝点击