java - 高效优化算法
问题描述
我正在尝试制定优化日常任务计划的算法。例如:
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.
现在我有这个代码,但它不能正常工作:
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);
}
它返回我的工人数量,但它不像它应该的那样工作。我没有像我在这几个例子中写的那样得到结果。你能给我一些建议吗?
解决方案
我不确定你是否能找到确切的公式,所以我会做简单的蛮力:
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>
}
推荐阅读
- javascript - 从访问器中提取字段名称,还是使用访问器设置?
- javascript - 在react redux中使用空值搜索返回空数组而不是整个数据
- maven-surefire-plugin - 1 个特定测试的 testFailureIgnore
- python - 如何将meshgrid作为参数传递给只允许python中的数组的函数
- python - Python 迭代、replace() 和 strip()
- python - ensurepip 是否保证包含在 Python 中?
- android - 如何在颤动中获得缓冲的视频持续时间?
- firebase - Firestore 文档的确切大小是多少?
- android - Webrtc - 如何在 android 中添加 Video MediaConstraint?
- sql - 获取 Power BI 中的周数