对于使用代码std::random_shuffle
,我需要设置一个随机种子,使得所产生的伪随机序列中的每个程序运行而有所不同。
在此代码示例 ,使一个呼叫
srand ( unsigned ( time (NULL) ) );
这需要
#include <ctime>
#include <cstdlib>
我想知道:由于C ++ 11包括主要更新伪随机数生成,这是仍然是最新的? 我应该用什么来设置随机种子std::random_shuffle
?
对于使用代码std::random_shuffle
,我需要设置一个随机种子,使得所产生的伪随机序列中的每个程序运行而有所不同。
在此代码示例 ,使一个呼叫
srand ( unsigned ( time (NULL) ) );
这需要
#include <ctime>
#include <cstdlib>
我想知道:由于C ++ 11包括主要更新伪随机数生成,这是仍然是最新的? 我应该用什么来设置随机种子std::random_shuffle
?
random_shuffle
除非你提供一个使用一个实现定义的随机数发生器。 所以,不,用srand
不一定是正确的。
否则,它使用您提供的发电机。 您可以使用rand
,如果你想知道那是什么被使用。
srand(seed);
std::random_shuffle(first, last, [](int n) { return rand() % n; });
// this is a biased generator
// see <http://eternallyconfuzzled.com/arts/jsw_art_rand.aspx>
不过,我建议使用新的<random>
设施代替兰特()。 例子如下。
std::default_random_engine gen(seed);
std::shuffle(first, last, gen);
如果您正在使用C ++ 11,考虑使用std::shuffle
,而不是std::random_shuffle
,并通过随机数发生器,作为最后一个例子在这里
如果你真的在乎精度,质量和产生随机数的方法的多样性,我会强烈建议考虑使用著名的Gnu Scientific Library
( GSL )
这使得真正的统一生成和最好的各种算法。 见这里 。
特别这和这描述了可用的算法:
— gsl_rng_mt19937
— gsl_rng_taus
— gsl_rng_taus2
— gsl_rng_gfsr4
...
编辑:另外的boost ::随机应考虑GSL的GPLness一个很好的选择(但我从来没有与它dealed ...)。