- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Все что нужно знать о DDоS-атаках грамотному менеджеру
И как реагировать на "пожар", когда неизвестно, где хранятся "огнетушители
Антон Никонов
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Имеется массив:
ID Опция Вероятность
1 Выбор1 5
2 Выбор2 10
3 Выбор3 10
4 Выбор4 25
5 Выбор5 50
Как выбрать случайный элемент массива согласно заданным вероятностям?
Суммируете вероятности, выбираете случайное число от нуля до суммы вероятностей, пробегаетесь по массиву, суммируете вероятности, как только сумма стала больше выбранного случайного числа - текущий элемент - ваш.
ну если начать, что распределение генератора случайных чисел на больших интервалах далеко не случайно :-)))))
то я бы сделал так.
чтото такое, подход думаю объяснил, если опечатался - простите уж, не проверял :-)
да и писать код в строке ответа неудобно :(
как-то так
function getCase(){$chances = array('Выбор1'=>5,'Выбор2'=>10,'Выбор3'=>10,'Выбор4'=>25,'Выбор5'=>50);
$id = rand(0,99); $k = 0;
foreach($chances as $key => $value){
if($id>=$k && $id< $k + $value) {
return $key;
}
$k += $value;
}
return null;
}
WhiteSmartFox добавил 14-02-2011 в 18:40
я бы сделал так
Честно говоря совершенно не понял код, в результате как я понимаю будет массив $winner примерно равный массиву $chances, а смысл в нем? Задание было по моему совсем другим.
WhiteSmartFox, ужасть =)
да, вы видимо не поняли код)
это просто 100 итераций и запоминание наиболее частого с этими вероятностями.
тупо говоря - ваш код * 100 :))
это просто 100 итераций и запоминание наиболее частого с этими вероятностями.
Это не поможет. Если вы говорите что распределение не случайно вы таким образом только УВЕЛИЧИВАЕТЕ неслучайность. Скажем если чаще будут выпадать числа от 0 до 5, то прогнав 100 раз вы значительно увеличите вероятность выпадения числа от 0 до 5.
P.S. Для небольшого кол-ва итераций не совсем случайностью рандома можно вполне пренебречь.
WhiteSmartFox, оба кода хороши, как и наши горожи 🤣
пусть выбирает, мне без разницы =)
Всем спасибо! WhiteSmartFox, огромное спасибо! :)