c – std :: mt19937 mersenne twister分布,具有非重复值
发布时间:2020-12-16 10:24:50 所属栏目:百科 来源:网络整理
导读:我想使用std :: mt19937随机数生成器生成0到255之间的数字列表. “一旦选择了一个数字,它就不会再出现在集合中.” – 这就是我不知道该怎么办.这个数学术语逃脱了我(!) std::mt19937 twister;std::uniform_int_distributionint distribution;twister.seed(9
我想使用std :: mt19937随机数生成器生成0到255之间的数字列表.
“一旦选择了一个数字,它就不会再出现在集合中.” – 这就是我不知道该怎么办.这个数学术语逃脱了我(!) std::mt19937 twister; std::uniform_int_distribution<int> distribution; twister.seed(91210); distribution = std::uniform_int_distribution<int>(0,255); std::vector vNumbers; vNumbers.resize(256); for( int n = 0; n < 256; ++ n ) vNumbers[n] = distribution(twister); 解决方法
有算法:
// fill a vector ith [0..255]: std::vector<int> vNumbers(256); std::iota(vNumbers.begin(),vNumbers.end(),0); // shuffle it std::random_shuffle(vNumbers.begin(),vNumbers.end()); // done 使用C 11,您可以为RNG传递自己的生成器:(另请参阅注释) std::shuffle(vNumbers.begin(),twister); 或者你可以自己推(谷歌Fisher-Yates,或看看Knuth) 当然,iota可以替换为te以下 for (int i=0; i<256; ++i) vNumbers[i] = i; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |