gpt4 book ai didi

c++ - 具有不同可能性的随机整数

转载 作者:太空狗 更新时间:2023-10-29 21:14:48 24 4
gpt4 key购买 nike

我想知道是否有办法在 A 和 b 之间生成一个随机数,如果一个数字满足特定要求,它比 A 和 B 之间的所有其他数字更有可能出现,例如:较低的数字更有可能出现,因此如果 A = 1 且 B = 10,则 1 最有可能出现,10 最不可能出现。

感谢所有帮助:)(抱歉英语/语法/问题不好)

最佳答案

C++11(你现在绝对应该使用它)添加了 <random> header 到 C++ 标准库。此 header 为 C++ 提供了更高质量的随机数生成器。使用 srand()rand()从来都不是一个很好的主意,因为没有质量保证,但现在它真的是不可原谅的。

在您的示例中,听起来您想要的可能是所谓的“离散三角分布”:概率质量函数看起来像一个三角形。在 C++ 中实现这一点的最简单(但可能不是最有效)的方法是 <random> 中包含的离散分布。 :

auto discrete_triangular_distribution(int max) {
std::vector<int> weights(max);
std::iota(weights.begin(), weights.end(), 0);
std::discrete_distribution<> dist(weights.begin(), weights.end());
return dist;
}

int main() {
std::random_device rd;
std::mt19937 gen(rd());
auto&& dist = discrete_triangular_distribution(10);
std::map<int, int> counts;
for (int i = 0; i < 10000; i++)
++counts[dist(gen)];
for (auto count: counts)
std::cout << count.first << " generated ";
std::cout << count.second << " times.\n";
}

这对我来说给出了以下输出:

1 generated 233 times.
2 generated 425 times.
3 generated 677 times.
4 generated 854 times.
5 generated 1130 times.
6 generated 1334 times.
7 generated 1565 times.
8 generated 1804 times.
9 generated 1978 times.

比这更复杂的事情最好使用现有的分布之一(有人告诉我所有常用的统计分布都包括在内)或编写您自己的分布,这并不难:它只是必须是一个带有函数调用运算符的对象,该运算符采用随机位生成器并使用这些位来生成(在本例中)随机数。但是您可以创建一个生成随机字符串或任何任意随机对象的对象,也许用于测试目的)。

关于c++ - 具有不同可能性的随机整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39801831/

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