Генератор случайных чисел из вектора с распределением вероятностей в переполнении стека

У меня та же проблема, что и здесь Генератор случайных чисел с распределенной вероятностью но в с ++. Я знаю, как это реализовать, но мой вопрос — это функциональная сборка в текущей версии c ++?

0

Решение

Для полноты я отвечу на вопрос.

Этот дистрибутив может быть создан с использованием библиотеки генерации случайных чисел в C ++ 11. Это сначала требует заполнения механизма случайных чисел (здесь я использую std::mt19937), а затем использовать этот двигатель с std::discrete_distribution распределение случайных чисел.

std::discrete_dstributionконструктор принимает либо диапазон итератора по последовательности весов, либо initializer_list весов. Сгенерированные числа затем взвешиваются в соответствии с соответствующим индексом в последовательности весов. То есть если {10, 5, 1} вес, 0 будет производиться с 10/(10 + 5 + 1) = 0.625 вероятность и тд.

Следующий код демонстрирует решение другого вопроса:

std::random_device device;
std::mt19937 engine(device()); // Seed the random number engine
std::discrete_distribution<> dist({150, 40, 15, 3}); // Create the distribution

// Now generate values with:
std::cout << (dist(engine) + 1) << std::endl;
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]