我正在使用下面这段代码并在循环中调用它,以便我可以为我的完美哈希函数获取多个随机数。但它给了我相同的数字,而不是截然不同。 “min”接收0或1,max接收“p-1”。其中p是素数大于散列表大小。
long long int generateSingleRandomNo2(long long int min, long long int max)
{
typedef boost::uniform_int<long long int> NumberDistribution;
typedef boost::mt19937 RandomNumberGenerator;
typedef boost::variate_generator<RandomNumberGenerator&,NumberDistribution> Generator;
NumberDistribution distribution(min,max);
RandomNumberGenerator generator;
Generator numberGenerator(generator, distribution);
generator.seed(time(0)); // seed with the current time
long long int A=numberGenerator();
return A;
/*if(A>min)
return A ;
else
generateSingleRandomNo1(min,max);*/
}
答案 0 :(得分:1)
要获得不同的随机数,您只需拨打seed(...)
一次。一种可能的解决方案是使用静态RandomNumberGenerator实例:
long long int generateSingleRandomNo2(long long int min, long long int max)
{
struct RandomNumberGenerator : public boost::mt19937 {
RandomNumberGenerator() {
seed(time(NULL)); // seed with the current time
}
};
typedef boost::uniform_int<long long int> NumberDistribution;
typedef boost::variate_generator<RandomNumberGenerator&,NumberDistribution> Generator;
// static generator instance
static RandomNumberGenerator generator;
// generate random number
NumberDistribution distribution(min, max);
Generator numberGenerator(generator, distribution);
long long int A = numberGenerator();
return A;
/*if(A>min)
return A ;
else
generateSingleRandomNo1(min,max);
*/
}