Генерация случайных значений на PHP с заданной вероятностью
Понадобилась функция, которая возвращает случайный элемент из определенного набора. Вроде бы простейшее решение в одну строчку. Но особенность задачи такова, что элементы должны появляться не просто случайно, а с определенной вероятностью: какие-то чаще, какие-то реже. То есть у каждого значения имеется весовой коэффициент, влияющий на частоту его появления. Например:Code (PHP) : Убрать нумерацию
- // Массив значений и весовых коэффициентов
- $data=array(
- 'купить'=>50,
- 'заказать'=>5,
- 'приобрести'=>30,
- );
Code (PHP) : Убрать нумерацию
- //-------------------------------------------------------------
- // Получение случайного значения с заданной вероятностью
- //-------------------------------------------------------------
- function smart_rand($data) {
- // Пустой массив не обрабатываем
- if (count($data)==0) { return false; }
- // Отсортировать массив с сохранением ключей
- arsort($data);
- // Сформировать массив с интервалами
- $max_rand=0;
- $weights=array();
- foreach ($data as $key=>$value) {
- $max_rand+=$value;
- $weights[$max_rand]=$key;
- }
- // Случайное число от 0 до суммы всех весовых коэффициентов
- $rand=mt_rand(0,$max_rand);
- // Найти интервал, в который попадает случайное число
- foreach ($weights as $key=>$value) {
- if ($rand<=$key) {
- break;
- }
- }
- return $value;
- }
Code (PHP) : Убрать нумерацию
- // Вывести 100 вариантов написания
- for($i=0; $i<100; $i++) {
- echo smart_rand($data).' ';
- }
Просмотров: 1992 | Комментариев: 1
Метки: PHP, генератор ПСЧ
Внимание! Статья опубликована больше года назад, информация могла устареть!
Комментарии
Отзывы посетителей сайта о статье
Владислав
(11.01.2019 в 14:18):
Спасибо! полезная штука
Добавить комментарий
Заполните форму для добавления комментария