请设计调度算法,使得所有任务完成所需的时间最短
1) 简述思路2) 请用你熟悉的编程语言编码实现以下方法,输入为m台服务器,每台机器处理一个任务的时间为t[i],完成n个任务,输出n个任务在m台服务器的分布:
int estimate_process_time(int[] t, int m, int n);
请设计调度算法,使得所有任务完成所需的时间最短
1) 简述思路2) 请用你熟悉的编程语言编码实现以下方法,输入为m台服务器,每台机器处理一个任务的时间为t[i],完成n个任务,输出n个任务在m台服务器的分布:
int estimate_process_time(int[] t, int m, int n);
/** * 思路:贪心。记录每个机器已经执行任务的耗时 *对于一个新任务,取所有机器(已用耗时 + 机器自身耗时)的最小值,即为这个新任务执行的机器 * 这个实现为N^2算法。用上排序可改为 Nlog(N) */ private static int estimate_process_time(int[] t, int m, int n) { int [] cost = new int[m]; // cost 记录耗时 for (int i = 0; i < m ; i ++) { cost[i] = 0; } for (int i = 0; i < n; i ++) { int temp = cost[0] + t[0], index = 0; for (int j = 1; j < m; j ++) { if (cost[j] + t[j] < temp) { // 选择执行机器 temp = cost[j] + t[j]; index = j; } } cost[index] += t[index]; //记录耗时 } int maxTime = 0; for (int i = 0; i < m; i ++) { maxTime = Math.max(cost[i], maxTime); // 取所有机器的最大耗时 } return maxTime; }
private int estimate_process_time(int[] t, int m, int n) { int[] cost = new int[m]; // cost 记录耗时 for ( int i = 0; i < n; i++) { int index = 0,temp = cost[index] + t[i]; for (int j = 1; j < m; j++) { if (cost[j] + t[i] < temp) { // 选择执行机器 temp = cost[j] + t[i]; index = j; } } cost[index] += t[i]; //记录耗时 } int maxTime = 0; for (int i = 0; i < m; i++) { maxTime = Math.max(cost[i], maxTime); // 取所有机器的最大耗时 } return maxTime; }