I'm a relative newcomer to the world of combinatorics, and would like a suggestion for how to tackle this problem.

We have an event that 750 students will be attending. The event is split into 4 sessions. (A,B,C,D) They can pick 4 subjects out of a list of 48, and each choice will take up a session slot. Each choice has a preference weighting from 1-4, their first choice being priority.

If a subject is particularly popular, we run multiple instances of it. For example, Psychology will run 2 instances of a class in each session. Each class can hold 25 people. So we can have 50 people attending Psychology in any given session.

Roughly 20 subjects will only have enough interest to have 1 instance of a class.

How would you start to do this analysis and allocation? I'm an experienced programmer in C#, so would use that.

My first idea was to identify "problem students" those who have the least number of available options, and to distribute the least popular courses evenly throughout the day, so that they can be catered for.

Once these times for the least popular courses are settled, I'd then balance the non-problem student into these courses. (i.e They have chosen a low interest course, but have a larger number of options.)

If this is not a computer science question, if you could point me in the right direction i'd be very grateful!



  • 2
    $\begingroup$ Sometimes the way to give one person their top preference involves giving another person less than their top preference. How do you want to resolve these tradeoffs? There are multiple different ways you might choose a solution, depending on how you want to prioritize things based on the students' preferences. You might start by looking into the stable marriage problem and the assignment problem to see if you like how either of those handle the tradeoffs. $\endgroup$ – D.W. Feb 5 at 17:49

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.