Eliminar elementos de un conjunto distribuido de manera desigual

Tengo un sitio web donde los usuarios envían preguntas (cero, una o múltiples por día), las votan y responden una pregunta por día (más detallesaqu). Un usuario puede ver la pregunta solo una vez al enviarla, votarla o responderla.

Tengo un grupo de preguntas que los jugadores ya han visto. Necesito eliminar 30 preguntas del grupo cada mes. Necesito elegir preguntas para eliminar de tal manera que maximice el número de preguntas disponibles que quedan en el grupo para el jugador con menos preguntas disponibles.

Ejemplo con grupo de 5 preguntas (y necesita eliminar 3):

player A ha visto las preguntas 1, 3 y 5player B ha visto las preguntas 1 y 4player C ha visto las preguntas 2 y 4

Pensé en eliminar las preguntas que ha visto el mejor jugador, pero la posición cambiaría. Siguiendo el ejemplo anterior, al jugador A solo le quedan 2 preguntas por jugar (2 y 4). Sin embargo, si elimino 1, 3 y 5, la situación sería:

player A puede reproducir las preguntas 2 y 4player B puede jugar la pregunta 2player C no puede jugar nada porque se eliminan 1,3,5 y ya ha visto 2 y 4.

La puntuación para esta solución es cero, es decir, el jugador con la menor cantidad de preguntas disponibles tiene cero preguntas disponibles para jugar.

En este caso, sería mejor eliminar 1, 3 y 4, dando:

player A puede jugar la pregunta 2player B puede jugar las preguntas 2 y 5player C puede jugar la pregunta 5

La puntuación para esta solución es uno, porque los dos jugadores con la menor cantidad de preguntas disponibles para jugar tienen una pregunta disponible.

Si el tamaño de los datos fuera pequeño, podría aplicar la solución por fuerza bruta. Sin embargo, tengo cientos de jugadores y preguntas, así que estoy buscando un algoritmo para resolver esto.

Respuestas a la pregunta(20)

Su respuesta a la pregunta