贪心算法求解多机调度问题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
贪心算法求解多机调度问题
设有n项独立的作业{1,2,…, n},由m 台相同的机器加工处理。作业i 所需要的处理时间为台相同的机器加工处理。设有n 项独立的作业由ti。约定:任何一项作业可在任何一台机器上处理,但未完工前不准中断处理;任何作业不能拆分成更小的子作业。多机调度问题要求给出一种调度方案,能拆分成更小的子作业。多机调度问题要求给出一种调度方案,使所给的n 个作业在尽可台机器处理完。利用贪心策略,设计贪心算法解决多机调度问题,能短的时间内由m 台机器处理完。利用贪心策略,设计贪心算法解决多机调度问题,并计算其时间复杂度。
多机调度问题的一个实例:
多机调度问题的一个实例:项独立的作业{1,2,3,4,5,6,7},要由三台机器M1, M2 ,M3 处理。各个作业所需处理。各个作业所需例如设有7 项独立的作业,要的处理时间分别为{2,14,4,16,6,5,3}。利用你设计的贪心算法,要的处理时间分别为。利用你设计的贪心算法,安排作业的处理顺序使得机器处理作业的时间最短。器处理作业的时间最短。
#include
using namespace std;
void Greedy(int t[],int n,int m);
int main() {
int n=7,m=3,t[]={2,14,4,16,6,5,3};//待分配的工作
Greedy(t,n,m);
return 0; }
void Greedy(int t[],int n,int m)
{ int flagn,flagm; int M[]={0,0,0,0,0,0,0,0};
for(int i=0;i { int max=0,min=10000; flagn=0; flagm=0; for(int j=0;j { if(max for(j=0;j { if(M[flagm]>M[j]) {flagm=j;} } M[flagm]=M[flagm]+t[flagn]; t[flagn]=0; //被选择过的机器时间调为0 cout<