我试图理解 c++11 中不同的分布对象,但我发现它令人难以承受。我希望你们中的一些人能够并且将会提供帮助。
这就是我研究这一切的原因:
我需要一个随机数生成器,每次使用它时我都可以调整它,以便它更有可能再次生成相同的数字。我需要满足的第二个要求是我需要生成的随机数仅为这些数字:
{1, 2, 4, 8, 16, ..., 128}
第三个也是最后一个要求是,在某些情况下我需要从上面的集合中跳过一个或多个数字。
我的问题是我不明白各种分布对象的描述。因此,我无法确定需要使用哪些工具来满足我的上述需求。
有人可以告诉我需要什么工具以及如何使用它们吗?回复越清晰、简洁和详细越好。
最佳答案
您的范围可以使用 [0, 7] 范围内的随机数 j 生成,然后计算:
1 << j
获取您的电话号码。 std::uniform_int_distribution<>
可以很方便地生成 [0, 7] 中的值。
此外,您可以使用std::bernoulli_distribution
(返回一个随机 bool 值)来决定下一个数字是否与上一个数字相同,或者是否应该生成一个新数字。 std::bernoulli_distribution
默认为真/假的概率为 50/50,但您可以在 bernoulli_distribution
中自定义该分布。构造函数为您喜欢的任何内容(例如 80/20 或其他)。
如果这还不够清楚,请输入一些代码。尝试对其进行编码,如果不起作用,请发布您所拥有的内容,我相信有人会提供帮助。
哦,忘记了你的第三个要求:为此,只需将你的 [0, 7] 代放入一个循环中,如果你想出一个你应该跳过的数字,那么迭代循环,否则打破它。
关于c++11 - 制作自定义的随机数分布,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25099585/