首先,了解一下什么是伪随机数:
真正意义上的随机数(或者随机事件)在某次产生过程中是按照实验过程中表现的分布概率随机产生的,其结果是不可预测的,是不可见的。而计算机中的随机函数是按照一定算法模拟产生的,其结果是确定的,是可见的。我们可以这样认为这个可预见的结果其出现的概率是100%。所以用计算机随机函数所产生的“随机数”并不随机,是伪随机数。
随机数的设定可以分为两个过程
1、设定种子,该过程是指随机数原来有一个分布队列,种子决定从队列中的哪个数开始产生随机数。如果种子相同,则每次执行随机数的过程产生的随机数是一样的。如果每次的种子不同,则每次运行程序产生的随机数都是不一样的 。产生以时间为种子的过程语句为:
srand ((int)time(0));//当然了这里要包含time.h
2、产生随机数,语句为:
for(i=0;i<k;i++)a[i]=random(1000);//产生随机数,范围是从0到1000
下面给出一段C++运行的代码:
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
#define MAX 10
#define N 1000
void main()
{
int randomDatas[MAX];
int i;
//srand((int)time(0));
for(i=0;i<MAX;i++)
randomDatas[i]=rand()%N;//产生0到N范围的随机数
for(i=0;i<MAX;i++)
cout<<randomDatas[i]<<"\t";
}
多次运行以上代码,可以看到每次运行的结果都是一样的。但是,如果将//srand((int)time(0)); 的注释去掉的话,那么每次执行的结果就会出现不同,我们可以利用这句话达到不同的效果。
在STL(标准模板库)中提供了一个名称为 random_shuffle 的函数,用于对容器内的变量进行排序,下面是一个使用的示例
// alg_random_shuffle.cpp
// compile with: /EHsc
#include <vector>
#include <algorithm>
#include <iostream>
void main( ) {
using namespace std;
vector <int> v1;
vector <int>::iterator Iter1;
int i;
for ( i = 1 ; i <= 9 ; i++ )
v1.push_back( i );
random_shuffle( v1.begin( ), v1.end( ) );
cout << "The original version of vector v1 is: ( " ;
for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ )
cout << *Iter1 << " ";
cout << ")." << endl;
// Shuffled once
random_shuffle( v1.begin( ), v1.end( ));
push_heap( v1.begin( ), v1.end( ) );
cout << "Vector v1 after one shuffle is: ( " ;
for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ )
cout << *Iter1 << " ";
cout << ")." << endl;
}