I'm working with a group of volunteers, and we're trying to make a roster for taking care of cats in the area.
We have 21 time slots per week (3 per day), and we polled the volunteers to find out which time slots they are available. Currently all time slots have at least 1 person available. With this data, I want to craft a volunteer roster that covers all slots, while spreading the work as evenly as possible. There are more than 21 persons, so this means each person only have to take 1 slot maximum per week. For now, we don't take into consideration for preference, though it would be good to have that as a feature. Could someone point me at an algorithm to solve this problem?