11089 多机最佳调度
时间限制:13000MS 内存限制:65535K
提交次数:0 通过次数:0
题型: 编程题 语言: 无限制
Description
假设有n个任务(n<=100),m台机器(m<=50),任务可以由任何一个机器完成,完成任务i需要的时间为ti, 请设计两种算法(一种采用贪心算法,另一种采用回溯算法),找出完成这n个任务的最佳调度,使得最早时间完成全部任务。 这里采用两种算法来求解: 1)贪心算法可以得到近似的最早完成时间,算法思想在书上4.7节。 2)回溯算法搜索m叉树(除叶节点外每个节点m个儿子),寻找最早的完成时间。
输入格式
输入两行,第一行为n和m,中间空格相连(其中n表示任务的数量,m表示机器的数量),(n<=100, m<=50)。 第二行的n个数是任务i的处理时间ti。
输出格式
输出两行,第一行为采用贪心算法算出的最早完成时间,第二行为采用回溯算法搜索出的最早完成时间。
输入样例
7 3 2 14 4 16 6 5 3 另一个输入示例: 14 3 10 10 10 10 10 7 7 7 7 7 5 5 5 5
输出样例
17 17 另一个输出示例: 37 35
提示
第(1)个贪心算法按书上思想去实现。 第(2)个就是在m叉树上深度优先搜寻最优解的过程。 //t数组为初始的任务处理时间; //len2数组为第二种回溯算法在搜索过程中已探察过任务的完成时间和; //x数组用来保存探察过的任务编号。 void backtrack (int dep) { if (dep == n) //叶子,或者if (dep>n),看首次调用backtrack参数是0还是1 { …… return; } for(int i = 0; i < m; i++) { len2[i] += t[dep]; x[dep] = i+1; if(len2[i] < best) { backtrack(dep+1); } len2[i] -= t[dep]; } }
#include <iostream>
#include <stdio.h>
#include <algorithm>
using namespace std;
int n,m;
int t[1000]={0};
int a[100]={0};
int aa[100]={0};
int res=100000;
int greedy(){
sort(t,t+n);
if(n<m){
int res=t[0];
for(int i=1;i<m;i++) //取最大值 作为工作时间
if(res < t[i])
res = t[i];
return res;
}else{
for(int i=0,j=n-1;j>=0;i++,j--)
{
if(i<m){
a[i]=t[j]; // 取最大的工作 分配给M个机器
}else{
int res=a[0];
int ii=0;
for(int i=1;i<m;i++){ //取最小时间的机器 分配工作
if(res > a[i])
{
res = a[i];
ii=i;
}
}
a[ii]+=t[j];
}
}
int res=a[0];
for(int i=1;i<m;i++) // 取最小时间作为 工作时间
if(res < a[i])
res = a[i];
return res;
}
}
void dfs(int deep){
if(deep > n-1){ //不能用sort啊,数组脚标会对不上
int sum=aa[0];
for(int i=1;i<m;i++) //取最大值 作为工作时间
if(sum < aa[i])
sum = aa[i];
if(res>sum) //更新最短时间
res = sum;
}else{
for(int i=0;i<m;i++){
aa[i]+=t[deep];
if(aa[i]<res) //剪枝 哈哈人生第一次
dfs(deep+1);
aa[i]-=t[deep];
}
}
}
int main()
{
freopen("in.txt","r",stdin);
cin >> n >> m;
for(int i=0;i<n;i++)
cin >> t[i];
cout << greedy() << endl;
dfs(0);
cout << res;
return 0;
}
相关推荐
最佳调度问题的回溯算法实现:有n个任务由k个可并行工作的机器完成。完成任务i需要的时间为Ti。找出完成这n个任务的最佳调度,使得完成全部任务的时间最少。用文件导入每个任务所需要的时间Ti。(至少10个任务)使用...
最佳调度算法、计算完成这n个任务的最佳调度假设有n个任务由k个并行工作的机器来完成
最佳调度问题
【问题描述】:假设有n个任务...试设计一个算法找出完成这n个任务的最佳调度,使得完成全部任务的时间最早。 Input : n k Ti Output: 完成任务的最少时间 Sample input Sample output 7 3 17 2 14 4 16 6 5 3
最佳调度问题,算法分析与设计的实验,含实验报告,代码和执行文件,简洁实用
最佳调度问题,假设有n个任务由k个可并行工作的机器完成
三个cpp文件分别实现 动态规划最长公共子序列,分治法实现最近点对问题,最佳调度问题的回溯
画出列车运行图,给出列车运行的最佳调度(python代码)
设有n个任务由k个可并行工作的机器来完成,完成任务i需要时间为 。试设计一个算法找出完成这n个任务的最佳调度,使完成全部任务的时间最早。(要求给出调度方案)
计算机系统结构课程设计 单功能非线性流水线最佳调度程序.doc
Sring最佳实践-集成任务调度服务,之前做的Demo,希望对大家有所帮助!!!
他作为计算机系统的辅助存储器,担负着繁重的输入输出任务、再多道程序设计系统中,往往同时会有若干个要求访问的磁盘输入输出请求等待处理。系统可采用一种策略,尽可呢干最佳次序执行要求访问磁盘的诸输入输出请求...
matlab程序参考《抽水蓄能电站的最佳调度方案研究 》(粒子群算法) 调峰电源的优化调度是促进电力系统安全稳定运行,实现可靠供电的要措施。因为目前我国的调峰电源严重不足,尤其是在丰水期,水电机组一般参与...
最佳高度问题。 问题描述: 假设有n个任务由K个可并行工作的机器完成。完成任务i需要的时间为t(i)。试设计一个算法找出完成这n个任务的最佳调度,使得完成全部任务的时间最早。
DataWorks调度最佳实践.pdf
这是中科大软件学院算法导论的课程设计,是用c++实现的 有实验报告
Storm下基于最佳并行度的贪心调度算法.pdf
批处理作业调度问题给定n个作业的集合{J1J2…Jn}。每个作业必须先由机器1处理,然后由机器2处理。作业Ji需要机器j的处理...批处理作业调度问题要求对于给定的n个作业,制定最佳作业调度方案,使其完成时间和达到最小。