Алгоритм группировки на основе предпочтений
Я ищу способ сортировки людей по классам по предпочтениям.
Например, скажем, есть 100 учеников, каждому из которых будет назначен один из пяти классов:
Наука - 40 местМатематика - 15 местИстория - 15 местКомпьютеры - 20 местНаписание - 10 местУ каждого студента есть три предпочтительных класса, которые упорядочены по предпочтению. Как лучше подойти к разделению учеников, чтобы как можно больше людей получили классы первого и второго выбора, при этом следя за тем, чтобы ни в одном классе не было слишком много учеников для комнаты.
Я думал о приближении к нему следующим методом:
Сгруппируйте всех студентов по их первому выборуПосмотрите, в каких классах слишком много учеников, а в каких слишком малоПроверьте, есть ли у учеников в перебронированных классах классы второго выбора, которые зарезервированыПереместите этих студентов соответственноПовторите 2-4 с классами 3-го выбораХотя я чувствую, что это разумная реализация, мне интересно, есть ли другие алгоритмы, которые решают эту проблему лучше. Я пытался искать все, но я не могу найти ничего, что решило бы такую проблему.