[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Шанс, вероятность, удача. Как её реализовать
inpost
Допустим действие должно быть выполнено с вероятностью в 10%, то можно if(rand(1,10) == 1), а что делать, когда вероятность события равна 0,0016%, допустим, при этом у нас может быть объектов 1000, или более, для каждого будет выставлен свой процент, сумма объектов будет равна 100%. Как это правильно реализовывать?
Банальный пример: выпадание игрового дропа, или рекламы на сайте.
Записи такие:
1. 3%
2. 0,5%
3. 0.016%
4. 96.484%
Вот как в данной ситуации распределять вероятность?



Спустя 5 минут, 15 секунд (3.09.2011 - 00:40) Nikitian написал(а):

$x = mt_rand(0,100000);
if($x<=96484){
//4
}
elseif($x<=96484+3000){
//1
}
elseif($x<=96484+3000+500){
//2
}
else{
//3
}

Спустя 1 минута, 53 секунды (3.09.2011 - 00:42) inpost написал(а):
Nikitian
А если их более 1000 записей, хранятся в БД, не получится тогда так сделать.

Спустя 18 минут, 12 секунд (3.09.2011 - 01:00) Nikitian написал(а):
select
*
from
table
order by

abs(`ver`-rand())
limit 1

`ver` - вероятность, выраженная дробным числом от 0 до 1, но не в процентном соотношении, а порядково. Т.е. для примера выше это будут такие значения:
0.96484
0.96484+0.03
0.96484+0.03+0.005
0.96484+0.03+0.005+0.00016

Соответственно при добавлении или удалении элементов, а так же изменении их вероятностей, весь индекс надо будет перестраивать.


_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.