Процентный показ элемента

ngsv
На сайте с 12.10.2012
Offline
47
452

Приветствую! Подскажите алгоритм, при котором из массива будет выводиться элемент с процентной долей вероятности?

Пример, на входе получаем массив:

$blocks = array(

array(
'img' => "image1.png",
'prc' => 50
),
array(
'img' => "image2.png",
'prc' => 40
),
array(
'img' => "image3.png",
'prc' => 10
)
);

...

На выходе должны получить элемент массива, с 50%, 40%, и 10% долей вероятности из общего числа просмотров.

SIQWELL (http://siqwell.com/) - Быстро. Качественно. Дорого.
ДП
На сайте с 23.11.2009
Offline
203
#1

Самое очевидное - запихните в другой массив знчения img столько раз, сколько у вас вероятность в процентах (ну или на 10 поделите в этом случае), а потом через rand() выбирайте оттуда любое значение.

Joker-jar
На сайте с 26.08.2010
Offline
171
#2

Достаточно взять rand(1,100) (при условии, что ваш массив сформирован верно и сумма всех вероятностей дает 100), а потом пробежаться по массиву и определить, в какой диапазон "попал" результат (сравниваем результат со счетчиком, если результат меньше или равен, то break, иначе к счетчику прибавляем prc.

ДП
На сайте с 23.11.2009
Offline
203
#3
Достаточно взять rand(1,100) (при условии, что ваш массив сформирован верно и сумма всех вероятностей дает 100)

А можно брать rand(1,сумма_вероятностей) - тогда как раз прпорционально будет и нет необходимости следить, что сумма 100 равнялась.

domen4you
На сайте с 08.03.2013
Offline
53
#4

сложность возникает, если кол-во элементов может меняться, если известно что их 3, то обычным рандомом

Joker-jar
На сайте с 26.08.2010
Offline
171
#5
Дикий пионер:
А можно брать rand(1,сумма_вероятностей) - тогда как раз прпорционально будет и нет необходимости следить, что сумма 100 равнялась.

Да, но в таком случае будет не вероятность в классическом смысле (от 0 до 1 или от 0 до 100%), а что-то типа ведра с шариками (в ведре 10 синих, 20 зеленых и 60 красных, какова вероятность что будет вытащен шар нужного цвета), такой массив несколько сложнее заполнять, с точки зрения прикидывания необходимой частоты показа элемента. Хотя, кому как.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий