贪心算法多机调度问题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《算法设计与分析》实验报告
2015-2016年第2学期
实验班级:
学生姓名:
学号:
指导老师:
信息工程学院
实验项目名称:贪心算法多机调度问题
实验日期:2016年4月6日
一、实验类型:□√验证性□设计性
二、实验目的
1、熟悉多机调度问题的算法;
2、初步掌握贪心算法;
三、实验内容与要求
要求给出一种作业调度方案,使所给的n个作业在尽可能短的时间内由m 台机器加工处理完成。约定,每个作业均可在任何一台机器上加工处理,但未完工前不允许中断处理。作业不能拆分成更小的子作业。
四、实验步骤
源程序:
#include
#include
using namespace std;
typedef struct Job
{
int ID;
int time;
}
Job;
Job J[10];
typedef struct JobNode
{
int ID;
int time;
JobNode *next;
}
JobNode,*pJobNode;
typedef struct Header
{
int s;
pJobNode next;
}
Header,*pHeader;
int l=1;
int main()
{
Header M[10];
int m,n;
cout<<"请输入数据的作业的个数与机器的个数"< cin>>n>>m; cout<<"请输入所有的任务的相关数据"< for(int i=1;i<=m;i++) M[i].s=0; for(int l=1;l<=n;l++) cin>>J[l].ID>>J[l].time; int SelectMin(Header *M,int m); for(l=1;l<=n;l++) cout<<"第"< return 0; } int SelectMin(Header *M,int m) { int k=1; for(int i=1;i<=m;i++) { if(M[i].s<=M[l].s) k=i; } M[k].s+=J[l].time; return k; } 五、实验结果 1、实验图形 图1 图2 2、结果分析 如上面第一个图所示当输入数据作业的个数与机器的个数为4和3的时候, 输入的所有任务相关的数据为1 2 3 4 5 6 7 8,第一个任务在第M3台机器上完成, 第二个任务在第M2台机器上完成, 第三个任务在第M1台机器上完成, 第四个任务在第M3台机器上完成, 如上面第二个图所示当输入数据作业的个数与机器的个数为5和1的时候,输入的所有任务相关的数据为12 6 2 8 1 9 5 4 3 7,第一个任务在第M1台机器上完成, 第二个任务在第M1台机器上完成, 第三个任务在第M1台机器上完成, 第四个任务在第M1台机器上完成, 第四个任务在第M1台机器上完成。 六、实验总结 本次的实验主要是为了让我们熟悉多机调度问题的算法并且能够初步的掌握贪心算法。一开始的时候没弄明白什么是多机调度,后来通过老师的讲解也是一知半解,最后还是通过网上查阅相关资料,并且看了一下视频才弄清楚。 本次的实验首先我们需要把作业按加工所用的时间从大到小排序;然后如果作业数目比机器的数目少或相等,则直接把作业分配下去;最后如果作业数目比机器的数目多,则每台机器上先分配一个作业,如下的作业分配时,是选那个表头上最小的链表加入新作业。 总之此次的实验不仅让我们在一定程度上了解了多机度问题,并且初步了解掌握了贪心算法,还提高了我们分析和解决问题的能力。