gpt4 book ai didi

c++ - random_shuffle 算法 - 没有随机生成器函数会产生相同的结果吗?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:06:38 27 4
gpt4 key购买 nike

如果标准库中的 random_shuffle 算法没有提供随机生成器函数,如果提供相同的数据,程序的连续运行会产生相同的随机序列吗?

例如,如果

std::random_shuffle(filenames.begin(), filenames.end());

在程序的连续运行中对目录中的相同文件名列表执行,生成的随机序列是否与先前运行中的相同?

最佳答案

如果你使用相同的随机生成器、相同的种子和相同的起始顺序,结果是一样的。电脑毕竟是其行为具有确定性(模线程问题和其他一些赔率和结束)。

如果不指定生成器,则默认生成器为实现定义。我认为大多数实现都使用std::rand()(这可能会导致问题,特别是当序列中的元素大于 RAND_MAX)。我会推荐获得质量已知的发电机并使用它。

如果你没有正确地为正在使用的生成器设置种子(另一个不使用默认值的原因,因为你如何播种将取决于实现),那么你会得到你得到的。如果是std::rand(),默认始终使用相同的种子。你如何播种取决于所使用的发电机。你用来播种的东西应该有所不同从一个运行到另一个;对于许多应用程序,time(NULL) 是充足的;在 Unix 平台上,我建议阅读多少字节它取自 /dev/random。否则,散列其他信息(IP机器的地址、进程 ID 等)也可以改进东西---它意味着两个用户在同一秒启动程序仍然会得到不同的序列。 (但这真的只是相关的如果您在网络环境中工作。)

关于c++ - random_shuffle 算法 - 没有随机生成器函数会产生相同的结果吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6999845/

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