@hiwibu

Как реализовать алгоритм частоты появления?

Есть массив, в нем 100 объектов. На текущий момент при каждом показе выводится случайный объект.
Теперь нужно, чтобы на основании поля приоритета определнные элементы показывались чаще
Например, если поле priority = 2, то элемент показывается в 2 раза чаще. Если 3, то в 3.

У кого есть какие мысли, как это можно реализовать?
  • Вопрос задан
  • 472 просмотра
Решения вопроса 1
GavriKos
@GavriKos
Ну так обычное распределение по весам. Каждый объект имеет вес. Суммируете все веса, кидаете рандом в пределах этой суммы. Далее начинаете идти по массиву, и суммировать веса. Как только просуммированный вес станет больше выданного рандомом - вот он ваш элемент.
Пример.
Три объекта, с весами 2, 1, 1. Кидаете рандом до 4. Выпадает например 3. Начинаете суммировать - сначала 2 - пропускаем первый элемент. Потом добавляем 1 - и это равно тому что выдал рандом. Возвращаем второй элемент.
Главное с пороговыми значениями не напутать.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
iCoderXXI
@iCoderXXI
React.JS/FrontEnd engineer
Я бы решил эту задачу так - каждому объекту присвоил бы счетчик, который инкрементируется при показе объекта.

Т.е. 100 объектов - 100 счетчиков.

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

После сортировал бы этот массив по возрастанию, и показывал объект по самой первой ссылке из отсортированного массива (при этом инкрементируя его индивидуальный счетчик).

И так каждый раз. Таким образом получаем отображение наименее показанного объекта с учетом приоритетов минимальными усилиями и с достаточно прозрачной логикой.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы