Условия
Цитата:
Сообщение от Ran
с пропорциональной этому числу вероятностью
|
и
Цитата:
Сообщение от Ran
у элементов '0' - самые маленькие, но все же они должны выпадать
|
взаимоисключающие.
Вероятность выпадения,
пропорциональная нулю - нулю и равна.
Вычисляется так: единица (вероятность того, что выпадет
хоть что-то) делится на сумму чисел и умножается на соответствующее число (необходимое условие
пропорциональности). При этом ноль не выпадет
никогда.
Следствия: если все элементы массива - нули, то задача решения не имеет. Ситуация "деление на ноль". Требуется встроить соответствующую проверку.
Дальше так: вызываем функцию находжения случайного числа в диапазоне от нуля до единицы и начинаем вычитать из него вероятности выпадения чисел
в порядке их возрастания до того момента, пока не получим результат равный нулю или меньше нуля. Как только данный результат достигнут - выводим число, которому соответствует последняя вычтенная вероятность.
Пример: массив чисел {0, 1, 2 ,3 ,4 ,5}
соответствующие вероятности {0, 1/15, 2/15, 3/15, 4/15, 5/15}
пусть выпало случайное число=1/4
1/4-0=1/4, больше 0, продолжаем
1/4-1/15=11/60, больше 0, продолжаем
11/60-2/15=3/60, больше 0, продолжаем
3/60-3/15=-9/60, меньше 0, цикл завершён, выводим 3
Дальше снова берём случайное число и повторяем цикл.
Количество повторений цикла - столько, сколько нужно.
EvroStandart, Вашу мысль не понял.