Алгоритм группировки на основе предпочтений

Я ищу способ сортировки людей по классам по предпочтениям.

Например, скажем, есть 100 учеников, каждому из которых будет назначен один из пяти классов:

Наука - 40 местМатематика - 15 местИстория - 15 местКомпьютеры - 20 местНаписание - 10 мест

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

Я думал о приближении к нему следующим методом:

Сгруппируйте всех студентов по их первому выборуПосмотрите, в каких классах слишком много учеников, а в каких слишком малоПроверьте, есть ли у учеников в перебронированных классах классы второго выбора, которые зарезервированыПереместите этих студентов соответственноПовторите 2-4 с классами 3-го выбора

Хотя я чувствую, что это разумная реализация, мне интересно, есть ли другие алгоритмы, которые решают эту проблему лучше. Я пытался искать все, но я не могу найти ничего, что решило бы такую проблему.

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

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