Генерация случайных чисел со смещением при помощи языка программирования-PHP
Решение
Используйте функцию pc_rand_weighted(), показанную в примере
Пример pc_rand_weighted()
// возвращает взвешенный случайно выбранный ключ
function pc_rand_weighted($numbers) {
$total = 0;
foreach ($numbers as $number => $weight) {
$total += $weight;
$distribution[$number] = $total;
}
$rand = mt_rand(0, $total-1);
foreach ($distribution as $number => $weights) {
if ($rand < $weights) { return $number; }
}
}
Обсуждение
Представьте, что вместо массива, значения элементов которого отражают количество оставшихся копий объявлений, есть массив объявлений, в котором каждое объявление встречается ровно столько раз, сколько осталось его копий. Можно просто указать на не взвешенное случайное место внутри массива, и это будет реклама для показа. Вместо этого можно определить величину возможного массива (путем подсчета остающихся копий), выбрать случайное число из диапазона размера воображаемого массива, а затем пробежаться по массиву, определяя, какое объявление соответствует выбранному числу. Например:
$ads = array('ford' => 12234, // рекламодатель, остающиеся копии
'att' => 33424,
'ibm' => 16823);
$ad = pc_rand_weighted($ads);
Комментарии:
Комментариев нет
|
|
|