Boost库-不生成不同的随机数

Boost library- not generating distinct random numbers

本文关键字:随机数 Boost      更新时间:2023-10-16

我使用以下代码并在循环中调用它,这样我就可以为我的完美哈希函数获得多个随机数。但它给了我相同的数字,而不是不同的。"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);*/

}

要获得不同的随机数,只需要调用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);
  */
}