I am writing automatic assignment of tasks to the users. Every user has a weight (integer) and tasks should be distributed to the users according to their weights. For example I have 10 tasks and User A with weight 5, User B with weight 3 and User C with weight 2. Mapping function should assign User A with 5 task, B with 3 tasks, C with 2. This example is very straightforward, but it is not that easy when it comes to 34 users and 230 tasks for example. Is there any known algorithm i should look for?
The algorithm seems simple enough, apart from rounding errors.
- Add up all the weights => Wt.
- Allocate each user a number of tasks = N times user weight Wx / Wt, rounded down.
- There should be about N/2 task left over due to rounding. Allocate 1 task to each user in descending order of magnitude of rounding error (or any other algorithm if you prefer).