Reputation: 3
I'm trying to make algorithm for optimization daily task schedule. For example:
1. There are 16 tasks to finish in one day, expirience worker can finish 8 tasks and newer worker could finish 4 tasks. As output we should get 2 expirienced worker and none new worker.
For now I have this code, but it's not working properly:
private void calculate(int numberOfTasks, int oldWorkerValue, int youngWorkerValue) {
int numberOfOldWorkers = numberOfTasks / oldWorkerValue;
int numberOfYoungWorkers = 0;
if(numberOfOldWorkers == 0) {
numberOfOldWorkers = 1;
} else {
numberOfYoungWorkers = (numberOfTasks % numberOfOldWorkers) / youngWorkerValue;
if(numberOfTasks % oldWorkerValue != youngWorkerValue*numberOfYoungWorkers) {
numberOfYoungWorkers = numberOfYoungWorkers + 1;
}
}
System.out.println("Expirienced worker: " + numberOfOldWorkers + " and new workers: " + numberOfYoungWorkers);
}
it returns me number of worker but it doesn't work like it should be. I don't get result like I wrote in this few examples. Could you give me some advice for this?
Upvotes: 0
Views: 95
Reputation: 24145
I'm not sure whether you can find exact formula for this, so I'd do simple brute force:
public static Pair<Integer, Integer> calculate(int numberOfTasks, int oldWorkerValue, int youngWorkerValue) {
int m = Integer.MAX_VALUE; // minimal value
int o = 0; // old workers
int n = 0; // new workers
for (int i = 1; i <= (int)Math.ceil((double) numberOfTasks / oldWorkerValue); i++) {
int nw = (int) Math.ceil((double)(numberOfTasks - i * oldWorkerValue) / youngWorkerValue);
if (nw < 0) nw = 0;
int tm = i * oldWorkerValue + nw * youngWorkerValue;
if (tm < m) {
m = tm; o = i; n = nw;
}
}
return new Pair<>(o, n); // pair <old workers, new workers>
}
Upvotes: 1