贪心算法求解多机调度问题
设有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 <iostream>
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<n;i++)
{ int max=0,min=10000;
flagn=0;
flagm=0;
for(int j=0;j<n;j++)//选择时间最多的工作
{ if(max<t[j]) { max=t[j]; flagn=j; } }
for(j=0;j<m;j++)//选择工作量最小的机器
{
if(M[flagm]>M[j])
{flagm=j;}
}
M[flagm]=M[flagm]+t[flagn]; t[flagn]=0; //被选择过的机器时间调为0 cout<<flagn<<"work "<<flagm<<"machine"<<endl; } }。