@Nwton

Какую формулу можно подобрать?

Необходимо сгенерировать случайное число от 0 до 1
Но так, что бы чем больше число, тем больше вероятность его появления.
Что бы 0.8 выпадало с вероятностью 80%, 0.1 с вероятностью 10% и т.д.
Как это можно сделать?

Очевидно, если просто сгенерировать случайное число от 0 до 1, то будь на выходе 0.02 или 0.92 - вероятность их появления одинакова.

p.s. Пока придумал очень дубовый вариант: создать массив, загнать туда восемь восьмерок, десять десяток и так далее, перемешать и ткнуть случайным образом в один из элементов.
  • Вопрос задан
  • 259 просмотров
Решения вопроса 1
Из Ваших условий плотность распределения должна быть возрастающей, например - прямая.
Соответствующая ей функция распределения будет квадратичной.
А формула которую Вы ищете, это обратная к функции распределения, т.е. простейший случай - квадратный корень.

Генерируем равномерное число от 0 до 1, берем от него квадратный корень:
- выпало 0.90, считаем, что сгенерировали 0.94896
- выпало 0.50, считаем, что сгенерировали 0.70711.

В общем случае, мне кажется, что Вам подойдет любая непрерывная функция с отрицательной второй производной
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@syrov
пишу программы до 99 строк
Еще, для линейного увеличения вероятности, выберите два случайных числа между 0 и 1 если второе меньше первого, верните первое иначе попробовать еще. Кстати в вашей задаче 1, должен выпасть с вероятностью 1, т.е кроме 1 ничего выпасть не должно. Надо все-таки, наверное, чтобы площадь оставалась равной 1 (т.е числа в районе 0 должны выпадать с вероятностью близкой к 0, а в районе 1 с вероятностью близкой к 0.5).
float montecarlo() {
while (true) {
float r1 = random(1);
float probability = r1;
float r2 = random(1);
if (r2 < probability) {
return r1;
}
}
}

natureofcode.com/book/introduction
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы