私は、好みによって人々をクラスに分類する方法を見つけようとしています。
たとえば、100 人の生徒がそれぞれ 5 つのクラスのいずれかに割り当てられるとします。
- サイエンス - 40 席
- 数学 - 15席
- 歴史 - 15席
- コンピューター - 20 席
- ライティング - 10席
各生徒には、優先順に並べられた 3 つの優先クラスがあります。できるだけ多くの人が第 1 希望と第 2 希望のクラスに参加できるように生徒を分割する最善の方法は何ですか。
次の方法でアプローチすることを考えました。
- 全生徒を第一志望クラスでグループ分け
- 生徒数が多すぎるクラスと少なすぎるクラスを確認する
- オーバーブッキングされたクラスの生徒に、アンダーブッキングされた第 2 選択クラスがあるかどうかを確認します
- それに応じてそれらの学生を移動します
- 第 3 選択クラスで 2 ~ 4 を繰り返す
これは合理的な実装だと思いますが、この問題をより良い方法で解決するアルゴリズムが他にないかどうか疑問に思っています。いろいろ探してみましたが、この種の問題を解決するものは見つかりませんでした。