gpt4 book ai didi

c++ - std::mt19937 具有非重复值的梅森扭曲分布

转载 作者:太空狗 更新时间:2023-10-29 19:46:04 25 4
gpt4 key购买 nike

我想使用 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(), vNumbers.end(), twister);

或者您可以自己推出(谷歌 Fisher-Yates,或查看 Knuth)


当然iota可以用下面的替换

for (int i=0; i<256; ++i) vNumbers[i] = i;

关于c++ - std::mt19937 具有非重复值的梅森扭曲分布,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17942566/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com