Извлечение предметов из неравномерно распределенного набора

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

У меня есть пул вопросов, которые игроки уже видели. Мне нужно удалить 30 вопросов из пула каждый месяц. Мне нужно выбрать вопросы для удаления таким образом, чтобы я максимально увеличил количество доступных вопросов в пуле для игрока с наименьшим количеством доступных вопросов.

Пример с пулом из 5 вопросов (и нужно удалить 3):

игрок А видел вопросы 1, 3 и 5игрок Б видел вопросы 1 и 4игрок С видел вопросы 2 и 4

Я думал об удалении вопросов, которые видел лучший игрок, но позиция изменилась бы. Следуя приведенному выше примеру, игроку А осталось сыграть только 2 вопроса (2 и 4). Однако, если я уберу 1, 3 и 5, ситуация будет такой:

игрок А может сыграть вопросы 2 и 4игрок B может сыграть вопрос 2игрок C не может играть ничего, потому что 1,3,5 удалены, и он уже видел 2 и 4.

Оценка этого решения равна нулю, то есть игрок с наименьшим количеством доступных вопросов имеет ноль доступных вопросов для игры.

В этом случае было бы лучше удалить 1, 3 и 4, давая:

игрок А может сыграть вопрос 2игрок B может играть вопросы 2 и 5игрок С может сыграть вопрос 5

Счет за это решение один, потому что у двух игроков с наименьшим количеством доступных вопросов есть один доступный вопрос.

Если бы размер данных был небольшим, я мог бы перебить решение проблемы. Тем не менее, у меня есть сотни игроков и вопросов, поэтому я ищу какой-то алгоритм для решения этой проблемы.

Ответы на вопрос(10)

Ваш ответ на вопрос