Алгоритм Рэндома с процентным соотношением

my_php

Новичок
Алгоритм Рэндома с процентным соотношением

Есть такая проблема, надо сделать рэндомайз объектов при этом указывая с какой частотой они будут появлятся в процентах.

то есть если есть 3 объекта А, B и C, для них нужно указать 10%, 30% и 60% соответственно, что и будет являтся частотой их появления.

В поиске самого простого способа выполнения дошел до следующего (псевдокод):

i = random(100);

if i from 0 to 10 then object A
if i from 10 to 40 then object B
if i from 40 to 100 then object C

в таком случае получается довольно таки просто и удобно и наверно правильно если разброс рэндома будет хороший и малоповторяющийся. Сначала был выбор от 1 до 10, но потом он отпал так как будет явно много повторений и все пойдет не так как ожидается.

Можете высказать свое мнение есть ли в этом смысл или может есть какое другое решение?

Спасибо
 

fixxxer

К.О.
Партнер клуба
$a = array(
'A', 'B', 'B', 'B', 'C', 'C', 'C', 'C', 'C', 'C',
);
echo $a[mt_rand(0,count($a)-1)];
 

my_php

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

fixxxer

К.О.
Партнер клуба
ну мне кажется что проще зная проценты добавлять сколько нужно элементов в массив, если там динамическая фигня, это я как вариант.

а вообще изначальный подход нормальный вполне
 

dimagolov

Новичок
задача Монте-Карло. тема обсуждалась, причем название было 90% такое же как у этой.
 

Beavis

Banned
если есть массив элементов, и каждому элементу соответствует свой вес:

Код:
если сумма весов больше нуля
{
	$rnd = случайное число от 0 до суммы весов -1

	$max = 0
	foreach $array as $index => $element
	{
		$max = $max + $weights[$index]
		if ($rnd < $max)
		{
			$need_element = $element
			break
		}
	}
}
некогда в PHP всё переводить
 

my_php

Новичок
fixxxer спасибо

dimagolov, искал но не нашел, спасибо поищу получше
 
Сверху