Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.10.30;
Скачать: CL | DM;

Вниз

Выборка с приоритетом   Найти похожие ветки 

 
keal   (2005-10-10 18:25) [0]

есть рад объектов с приоритетами.

1 - выбирается больше всех
2 - выбирается меньше
3 - еще меньше
...

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


 
MBo ©   (2005-10-10 18:46) [1]

Пусть относительные вероятности 3:2:1
Частичные суммы 3, 5, 6 заносим в массив
генерируем случайное число в диапазоне 0..5, ищем в массиве част. сумм первое значение, большее случайного числа. его индекс - номер объекта


 
MBo ©   (2005-10-10 18:47) [2]

Пусть относительные вероятности 3:2:1
Частичные суммы 3, 5, 6 заносим в массив
генерируем случайное число в диапазоне 0..5, ищем в массиве част. сумм первое значение, большее случайного числа. его индекс - номер объекта


 
Leonid Troyanovsky ©   (2005-10-10 18:51) [3]


> keal   (10.10.05 18:25)  

> необходимо выбрать случайно несколько объектов учитывая
> приоритет. помогите алгоритмом.


Пусть 1 объект выбирается с вероятностью 0.5
2 - 0.3
3 - 0.2 (т.е., для всех объектов сумма = 1)

Тогда функция


function RandObjIdx(const p: array of Double): Longint;
var
 i: Longint;
 px : Double;
begin
 px := Random;
 for i := 0 to High(p) do
   if px < p[i] then
     begin
       Result := i;
       Exit;
     end;
 Result := High(p)+1;
end;


будет возвращать случайный индекс (от 0) объекта для заданной
функции распределения:  idx := RandObjIndex([0.5, 0.5+0.3]

--
Regards, LVT.


 
keal   (2005-10-10 18:54) [4]

а если есть
a) 1
b) 1
c) 10

сумма = 12

c - будет выпадать чаще всего, а надо чтоб a и b


 
keal   (2005-10-10 18:57) [5]

Leonid Troyanovsky ©, дело в том, что приоритеты заранеее не известны.


 
Leonid Troyanovsky ©   (2005-10-10 18:57) [6]


> keal   (10.10.05 18:54) [4]
> а если есть
> a) 1
> b) 1
> c) 10



idx := RandObjIdx([1/12, 2/12]);

--
Regards, LVT.


 
keal   (2005-10-10 19:00) [7]

число выбираемых объектов фиксированое


 
keal   (2005-10-10 19:05) [8]

Leonid Troyanovsky ©, я понял.

всем спасибо.



Страницы: 1 вся ветка

Текущий архив: 2005.10.30;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.061 c
8-1117729988
sashik
2005-06-02 20:33
2005.10.30
OenGL


11-1109970995
dimaxx
2005-03-05 00:16
2005.10.30
WordWrap в KOLRichEdit


2-1128877637
intel
2005-10-09 21:07
2005.10.30
модули


1-1128521993
Aleksey
2005-10-05 18:19
2005.10.30
Image.Canvas и LineTo


14-1128793787
Layner
2005-10-08 21:49
2005.10.30
Обновление программы