частотный (весовой) коэффициент
Есть динамический список неких объектов, у каждого из которых определён свой частотный (весовой) коэффициент. Коэффициент описывается, например, шкалой 1,2...n, со смыслом "чем больше номер, тем чаще должен появлятся объект при выборе". Сейчас выбор идёт простым рандомайзером, но нужно как-то задействовать этот коэффициент. Вопрос в том, как это сделать?
Буду очень благодарна за конкретные формулы или ссылки на любые документы, могущие оказаться полезными для решения этой задачи.
В заисимости от веса нужно построить список объектов. Каждый объект встречается в этом списке от 1 до n раз, в зависимости от веса.
Из этого списка по рандому выбирается объект. Чем больше один и тот же объект встречается в списке, тем больше вероятность того что он выберется
Например:
A - 4
B - 3
C - 1
D - 8
тогда список:
AAAABBBCDDDDDDDD
Способ хороший, но, подозреваю, не самый быстрый. Учитывая, что мои объекты - это узлы xml-дерева, и строить новое дерево с расширенным количеством узлов - это не так быстро, как хотелось бы.
Я всё надеюсь, что есть какая-то формула, чтобы определить нужный объект сразу, не создавая доволнительных списков.
Я всё надеюсь, что есть какая-то формула, чтобы определить нужный объект сразу, не создавая доволнительных списков.
Можно разделить диапазон, генерируемый рандомайзером (0..1) на поддиапазоны (в количестве равном кол-ву объектов). Длина каждого поддиапазона пропорциональна частоте вхождения объекта (n),а суммарная длина всех поддиапазонов = 1. Т.о. получим функцию, которая будет принимать случайное значение x(0..1), а возвращять номер поддиапазона, в который этот x попал (т.е. номер объекта).
Можно разделить диапазон, генерируемый рандомайзером (0..1) на поддиапазоны (в количестве равном кол-ву объектов). Длина каждого поддиапазона пропорциональна частоте вхождения объекта (n),а суммарная длина всех поддиапазонов = 1. Т.о. получим функцию, которая будет принимать случайное значение x(0..1), а возвращять номер поддиапазона, в который этот x попал (т.е. номер объекта).
Что то-же самое что я ответил вторым постом.
Способ хороший, но, подозреваю, не самый быстрый. Учитывая, что мои объекты - это узлы xml-дерева, и строить новое дерево с расширенным количеством узлов - это не так быстро, как хотелось бы.
Я всё надеюсь, что есть какая-то формула, чтобы определить нужный объект сразу, не создавая доволнительных списков.
Радуйтесь что у вас не баннерная сеть, в который тысячи баннером, миллионы просмотров и коэффицинты от 1 до 32 тыс :)
И все должно работать реал-тайм !!! Тут последовательности точно не построишь.