dragon010
Junior Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Symba87 Насколько я понял - основа твоей задачи в том, что 1) есть куча событий, с вероятностями 2) надо выбрать случайное, учитывая вероятности Сейчас ты генерируешь число в [0, 1) и потом как-то сравниваешь и пытаешься понять какое из событий произошло. При этом когда ты уже нашел ифами в какое обы ие ты попал, делашь ты одно и то же. А работает у тебя каждый выбор за О(н), да и кода дофига. Собственно как это пишется: Сопоставляешь каждому событию число в [0, н) Те индекс в массивах. Засовываешь в массив все вероятности. Теперь тебе надо сотворить еще один масив, в итой ячейке которого будет сумма всех вероятностей бля событий от 0 до i Теперь когда ты сгенерируешь число - тебе надо будет найти первую ячейку, где число (сумма на префиксе) больше либо равна твоему числу. И ты попал в соответствующее событие. При этом поиск в массиве естественно бирпоиском за О(лог Н) По сути - то же самое что и ты делаешь, только сильно короче и без тучи ифов и копипаста => сильно меньше шансов опечататься (опечатки при копипасте самые противные, лучше этого избегать) Если не понятно изложил, спрашивай, уточню |