![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Выборка с приоритетом [D7, WinXP]
keal © (2005-10-10 18:25:00)есть рад объектов с приоритетами.
1 - выбирается больше всех
2 - выбирается меньше
3 - еще меньше
...
необходимо выбрать случайно несколько объектов учитывая приоритет. помогите алгоритмом.
keal (2005-10-10 19:05:00) [1]Leonid Troyanovsky ©, я понял.
всем спасибо.
keal (2005-10-10 19:00:00) [2]число выбираемых объектов фиксированое
keal (2005-10-10 18:57:00) [3]Leonid Troyanovsky ©, дело в том, что приоритеты заранеее не известны.
Leonid Troyanovsky (2005-10-10 18:57:00) [4]
> 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 18:54:00) [5]а если есть
a) 1
b) 1
c) 10
сумма = 12
c - будет выпадать чаще всего, а надо чтоб a и b
Leonid Troyanovsky (2005-10-10 18:51:00) [6]
> 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.
MBo (2005-10-10 18:47:00) [7]Пусть относительные вероятности 3:2:1
Частичные суммы 3, 5, 6 заносим в массив
генерируем случайное число в диапазоне 0..5, ищем в массиве част. сумм первое значение, большее случайного числа. его индекс - номер объекта
MBo (2005-10-10 18:46:00) [8]Пусть относительные вероятности 3:2:1
Частичные суммы 3, 5, 6 заносим в массив
генерируем случайное число в диапазоне 0..5, ищем в массиве част. сумм первое значение, большее случайного числа. его индекс - номер объекта