算法导论_实验三 一个任务调度问题

合集下载

数据结构 任务调度 实验报告

数据结构 任务调度 实验报告

数据结构任务调度实验报告数据结构任务调度实验报告一、引言任务调度是计算机科学中一个非常重要的概念,以提高计算机系统的资源利用率和性能。

本实验报告旨在探讨任务调度在数据结构中的应用,并通过实验分析不同算法的性能表现。

二、实验目的1.理解任务调度的基本概念和相关算法;2.实现不同的任务调度算法;3.通过对比分析,评估不同算法的性能;4.探究任务调度在实际应用中的优化方案。

三、实验内容1.算法概述1.1 轮转调度算法轮转调度算法是一种简单的任务调度算法,按照任务的到达顺序进行调度,每个任务被分配一个固定的时间片来执行。

1.2 优先级调度算法优先级调度算法根据任务的优先级来进行调度,优先级高的任务会被先执行。

1.3 最短作业优先调度算法最短作业优先调度算法根据任务需要的执行时间来进行调度,执行时间短的任务会被先执行。

2.算法实现2.1 算法思路2.2 数据结构设计2.3 伪代码2.4 算法实现步骤3.算法性能分析3.1 实验环境3.2 实验数据3.3 实验结果分析四、实验结论通过对比分析不同的任务调度算法,我们可以得出以下结论:1.轮转调度算法适用于任务数量不多的情况下,但容易导致长任务的等待时间增加;2.优先级调度算法适用于需要精确控制任务执行顺序的场景;3.最短作业优先调度算法在任务执行时间差异较大时表现较好;4.实际应用中,可以根据任务的特点选择合适的调度算法,并结合其他优化策略来提高系统性能。

五、附件本实验报告涉及的附件包括:1.实验代码文件:task_scheduling.py;2.实验数据文件:scheduling_data.txt;3.实验结果分析图表:scheduling_analysis.png。

六、法律名词及注释1.版权:指法律规定的对各种原创作品(包括文学、艺术和科学作品)的独特经济和道德权益。

通过版权保护,作品的创作者可以授权或限制他人对作品的使用。

2.知识产权:指知识和信息的产权。

任务调度实验报告

任务调度实验报告

一、实验目的1. 理解任务调度的基本概念和原理。

2. 掌握任务调度的常用算法和策略。

3. 通过实验,验证任务调度算法的性能和效率。

二、实验环境1. 操作系统:Windows 102. 编程语言:Python3.83. 开发工具:PyCharm三、实验内容1. 任务调度算法:基于优先级、基于时间、基于轮转等。

2. 实验任务:模拟多任务并行执行,测试不同调度算法的性能。

四、实验步骤1. 定义任务类```pythonclass Task:def __init__(self, task_id, arrival_time, execution_time): self.task_id = task_idself.arrival_time = arrival_timeself.execution_time = execution_timeself.finish_time = 0self.wait_time = 0```2. 定义任务调度类```pythonclass TaskScheduler:def __init__(self):self.tasks = []def add_task(self, task):self.tasks.append(task)def schedule_tasks(self, algorithm):passdef get_task_info(self):for task in self.tasks:print(f"Task ID: {task.task_id}, Arrival Time:{task.arrival_time}, Execution Time: {task.execution_time}, Finish Time: {task.finish_time}, Wait Time: {task.wait_time}")```3. 定义基于优先级的调度算法```pythonclass PriorityScheduler(TaskScheduler):def schedule_tasks(self):self.tasks.sort(key=lambda x: x.arrival_time)self.tasks.sort(key=lambda x: x.execution_time, reverse=True)for task in self.tasks:task.finish_time = task.arrival_time + task.execution_timetask.wait_time = task.finish_time - task.arrival_time```4. 定义基于时间的调度算法```pythonclass TimeScheduler(TaskScheduler):def schedule_tasks(self):current_time = 0for task in self.tasks:if task.arrival_time <= current_time:task.finish_time = current_time + task.execution_time task.wait_time = task.finish_time - task.arrival_time current_time = task.finish_time```5. 定义基于轮转的调度算法```pythonclass RoundRobinScheduler(TaskScheduler):def __init__(self, quantum):super().__init__()self.quantum = quantumdef schedule_tasks(self):current_time = 0index = 0while index < len(self.tasks):task = self.tasks[index]if task.arrival_time <= current_time:if task.execution_time <= self.quantum:task.finish_time = current_time +task.execution_timetask.wait_time = task.finish_time -task.arrival_timecurrent_time = task.finish_timeindex += 1else:task.finish_time = current_time + self.quantumtask.wait_time = task.finish_time -task.arrival_timecurrent_time = task.finish_timetask.execution_time -= self.quantumelse:current_time = max(current_time, task.arrival_time) index += 1```6. 添加任务并执行调度```pythonscheduler = PriorityScheduler()scheduler.add_task(Task(1, 0, 5))scheduler.add_task(Task(2, 1, 3))scheduler.add_task(Task(3, 4, 2))scheduler.schedule_tasks()scheduler.get_task_info()```五、实验结果与分析1. 基于优先级的调度算法:任务执行顺序为3, 1, 2,平均等待时间为2.6667。

作业调度算法-实验报告

作业调度算法-实验报告

作业调度算法-实验报告作业调度算法模拟一、课题内容和要求常见的作业调度算法有先来先服务算法、最短作业优先算法、响应比优先调度算法。

(1) 参考操作系统教材理解这3种算法。

(2) 实现这3个算法。

(3) 已知若干作业的到达时间和服务时间,用实现的算法计算对该组作业进行调度的平均周转时间Ttime和平均带权周转时间WTtime。

(4) 作业的到达时间和服务时间可以存放在文本文件record.txt中。

(5) 设计简单的交互界面,演示所设计的功能。

(可以使用MFC进行界面的设计) (6)可根据自己能力,在完成以上基本要求后,对程序功能进行适当扩充。

二、需求分析模拟实现作业调度算法,包括:FCFS(先来先服务算法)、SJF(短作业优先算法)、HRN(最高响应比优先算法)、HPF(基于优先数调度算法)。

先来先服务算法:按照各个作业进入系统(输入井)的自然次序来调度算法。

短作业优先算法:优先调度并处理短作业。

所谓的“短作业”并不是指物理作业长度短,而是指作业的运行时间短。

最高响应比优先算法:优先调度并处理响应比最高的作业。

三、概要设计函数中一些类:Time类 int hour 小时 int minute 分钟 Job 类 Int ID 作业编号 Time enter 进入时间 int requesttime 估计运行时间 intpriority 优先数 Time start Time end int Ttime double WTtime 开始时间结束时间周转时间带权周转时间Schedule类 int size Job *job int *r Int Differ() void HRN() 作业数作业数组排序用数组求时间差最高响应比优先 schedule() void readFile() void FCFS() void SJF() 构造函数从文件读信息先来先服务短作业优先主要功能函数的流程图 1、 EDIT1 平均带权周转时间 2、先来先服务:结束 EDIT2 平均周转时间 EDIT4 平均周转时间 EDIT5 平均带权周转时间EDIT6 平均周转时间 EDIT7 平均带权周转时间 OnButton1() FCFS OnButton2() SJF 开始 readFile()给变量赋值 OnButton3() HRN 开始感谢您的阅读,祝您生活愉快。

山东大学操作系统实验报告3进程调度算法实验

山东大学操作系统实验报告3进程调度算法实验

计算机科学与技术学院实验报告
3) 输入make命令编译连接生成可执行的
psched程序$gmake
gcc -g -c experime nt3.c
gcc psched.o -o psched
4)
执行psched程序
分析:
根据以上示例程序和独立实验程序中观察和记录的信息,说明它们反映出操作系统教材中讲解的哪些进程调度调度策略和功能?在真实的操作系统中它是怎样实现教材中讲解的进程调度效果的。

先进先出算法
算法总是把处理机分配给最先进入就绪队列的进程,一个进程一旦分得处理机,便一直执行下去,直到该进程完成或阻塞时,才释放处理机。

最高优先权(FPF)优先调度算法
该算法总是把处理机分配给就绪队列中具有最高优先权的进程。

常用以下两种方法来确定进程的优先权:
轮转法
前几种算法主要用于批处理系统中,不能作为分时系统中的主调度算法,在分时系统中,都采用时间片轮转法。

体会:
1. 实验中定义的函数一定要考虑好函数的参数问题,这样才不会出现一些不必要的错误;
2. 对于一些要忽略的信号要忽略掉,免得影响后面的响应过程。

数据结构 任务调度 实验报告

数据结构 任务调度 实验报告

实验报告实验名称:表达式求值任务调度实验类型:综合性实验班级:学号:姓名:实验日期:2014.5.28表达式求值1.问题描述表达式是数据运算的基本形式。

人们的书写习惯是中缀式,如:11+22*(7-4)/3。

中缀式的计算按运算符的优先级及括号优先的原则,相同级别从左到右进行计算。

表达式还有后缀式(如:22 7 4 - * 3 / 11 +)和前缀式(如:+ 11 / * 22 – 7 4 3)。

后缀表达式和前缀表达式中没有括号,给计算带来方便。

如后缀式计算时按运算符出现的先后进行计算。

本设计的主要任务是进行表达式形式的转换及不同形式的表达式计算。

2.数据结构设计建立栈,算数表达式的计算往往是通过栈来实现的,所以建立结构体,如下typedef struct{float *base; //栈底指针float *top; //栈顶指针int stacksize;}SqStack_f; //实数栈typedef struct{char *base;char *top;int stacksize;}SqStack_c;//字符栈3.算法设计void Translate(char *s1) //中缀转后缀{char s2[80];SqStack_c Optr;int i=0,j=0;char t;InitStack_c(&Optr); //初始化一个运算符栈Push_c(&Optr,'(');while(s1[i]!='#'){if(s1[i]>='0' && s1[i]<='9' || s1[i]=='.'){s2[j++]=s1[i];if((s1[i+1]<'0' || s1[i+1]>'9') && s1[i+1]!='.')s2[j++]=' '; //将完整的字符型数字存入然后存入空格}elseswitch(s1[i]){case'(':Push_c(&Optr,s1[i]);break; //遇到左括号将其压栈case')':Pop_c(&Optr,&t); //遇到右括号时将栈内运算符弹出并压入数组s2 直到遇到左括号while(t!='('){s2[j++]=t;Pop_c(&Optr,&t);}break;default:while(GetTop_c(&Optr,&t),precede(t,s1[i]))//与栈顶元素比较若栈顶元素级别高则进行以下循环{Pop_c(&Optr,&t);s2[j++]=t; //弹出栈顶元素并存入数组s2}Push_c(&Optr,s1[i]); //将当前遇到运算符压栈}i++;}Pop_c(&Optr,&t);while(t!='('){s2[j++]=t;Pop_c(&Optr,&t);}for(i=0;i<j;i++)s1[i]=s2[i];s1[i]='#';s1[i+1]='\0';}void Calculate(SqStack_f *s,char *s2) //计算表达式的值{float m,x,y,z;int p,i=0,j=0;while(s2[i]!='#'){if(s2[i]>='0' && s2[i]<='9' || s2[i]=='.'){m=0;while(s2[i]!=' ' && s2[i]!='.')m=m*10+(float)(s2[i++]-'0');if(s2[i]=='.'){j=0;i++;while(s2[i]!=' '){m=m*10+(float)(s2[i++]-'0');j++;}while(j>0){m/=10;j--;}}i++;Push_f(s,m);GetTop_f(s,&m);}else{Pop_f(s,&x);Pop_f(s,&y);switch(s2[i]){case '+':z=y+x;Push_f(s,z);break;case '-':z=y-x;Push_f(s,z);break;case '*':z=y*x;Push_f(s,z);break;case '/':if(x==0){printf("表达式出错,除数为‘0’,无意义\n");exit(1);}else{z=y/x;Push_f(s,z);break;}case '%':if(x==0||(int)x!=x||(int)y!=y){printf("表达式出错\n");exit(1);}else{p=(int)y%(int)x;Push_f(s,p);break;}}i++;}}}int precede(char Top_char,char s1_char) //比较运算符的优先级{int i,pre[2];char op[2];op[0]=Top_char;op[1]=s1_char;for(i=0;i<2;i++)switch(op[i]){case'(':case')':pre[i]=0;break;case'+':case'-':pre[i]=1;break;case'*':case'/':case’%’:pre[i]=2;break;}if(pre[0]>=pre[1]) //栈顶元素top char>=s1 char就返回1 return 1;elsereturn 0;}void convert(char *s,char *output) //中缀转前缀{ int j=0;int top=0;char stack[50];strcpy(output,"");for(int i=strlen(s)-1;i>=0;){if((s[i]>=48&&s[i]<=57)||s[i]=='.')output[j++]=s[i];if(s[i]==')'){top++;stack[top]=s[i];}while(s[i]=='+'||s[i]=='-'||s[i]=='*'||s[i]=='/'||s[i]=='%'){output[j++]=' ';if(top==0||stack[top]==')'||precede(s[i],stack[top])){top++;stack[top]=s[i];break;}else{output[j++]=stack[top];top--;}}if(s[i]=='('){while(stack[top]!=')'){output[j++]=stack[top];top--;}top--;}i--;}while(top!=0){output[j++]=stack[top];top--; }}4.界面设计printf("请输入算术表达式,结束前请输入#号!\n");5.运行、测试与分析6、实验收获与思考1.熟练掌握栈的定义及使用。

任务调度算法

任务调度算法

任务调度算法任务调度算法是一种计算机算法,用于安排和管理任务的执行顺序和时间。

在计算机系统中,任务调度是一个非常重要的问题,因为多个任务需要在同一时间内执行。

任务调度算法可以帮助优化资源利用率,提高系统性能,同时保证任务的实时性和可靠性。

任务调度算法通常被用于操作系统、分布式系统、数据库管理系统等领域。

其中,最常见的任务调度算法包括以下几种:1. 时间片轮转调度算法:该算法为每个任务分配一个固定的时间片,当一个任务的时间片用完后,该任务就会被暂停,然后继续执行下一个任务。

这个过程不断循环,直到所有任务都完成。

2. 优先级调度算法:该算法为每个任务分配一个优先级,优先级高的任务先执行。

这个算法可以根据任务的重要性和紧急程度来安排任务的执行顺序。

3. 最短作业优先调度算法:该算法根据任务的执行时间来安排任务的执行顺序。

执行时间短的任务先执行,执行时间长的任务后执行。

4. 基于事件驱动的调度算法:该算法根据事件的发生时间来安排任务的执行顺序。

当一个事件发生时,与该事件相关的任务就会被触发并开始执行。

除了以上几种常见的任务调度算法,还有一些其他的算法,如静态优先级调度算法、动态优先级调度算法等。

不同的任务调度算法适用于不同的场景和应用,因此在选择合适的算法时需要根据具体情况进行选择。

在实际应用中,任务调度算法的优化可以显著提高系统性能和效率。

例如,在分布式系统中,任务调度算法可以帮助平衡不同节点上的任务负载,提高系统的稳定性和可靠性。

在数据库管理系统中,任务调度算法可以优化查询和更新流程,提高数据库的响应速度和性能。

因此,对于任何一个需要处理多个任务的系统来说,任务调度算法都是必不可少的。

操作系统实验报告——调度算法

操作系统实验报告——调度算法

操作系统实验报告——调度算法1. 实验目的本实验旨在探究操作系统中常用的调度算法,通过编写代码模拟不同的调度算法,了解它们的特点和应用场景。

2. 实验环境本次实验使用的操作系统环境为Linux,并采用C语言进行编码。

3. 实验内容3.1 调度算法1:先来先服务(FCFS)FCFS调度算法是一种简单且常见的调度算法。

该算法按照进程到达的先后顺序进行调度。

在本实验中,我们使用C语言编写代码模拟FCFS算法的调度过程,并记录每个进程的等待时间、周转时间和响应时间。

3.2 调度算法2:最短作业优先(SJF)SJF调度算法是一种非抢占式的调度算法,根据进程的执行时间来选择下一个要执行的进程。

在本实验中,我们使用C语言编写代码模拟SJF算法的调度过程,并计算每个进程的等待时间、周转时间和响应时间。

3.3 调度算法3:轮转调度(Round Robin)Round Robin调度算法是一种经典的时间片轮转算法,每个进程在给定的时间片内依次执行一定数量的时间。

如果进程的执行时间超过时间片,进程将被暂时挂起,等待下一次轮转。

在本实验中,我们使用C语言编写代码模拟Round Robin算法的调度过程,并计算每个进程的等待时间、周转时间和响应时间。

4. 实验结果分析通过对不同调度算法的模拟实验结果进行分析,可以得出以下结论:- FCFS算法适用于任务到达的先后顺序不重要的场景,但对于执行时间较长的进程可能会导致下一个进程需要等待较久。

- SJF算法适用于任务的执行时间差异较大的场景,能够提高整体执行效率。

- Round Robin算法适用于时间片相对较小的情况,能够公平地为每个进程提供执行时间。

5. 实验总结本次实验通过模拟不同调度算法的实际执行过程,深入了解了各种调度算法的原理、特点和适用场景。

通过对实验结果的分析,我们可以更好地选择合适的调度算法来满足实际应用的需求。

在后续的学习中,我们将进一步探索更多操作系统相关的实验和算法。

进程调度算法实验报告

进程调度算法实验报告

操作系统实验报告(二)实验题目:进程调度算法实验环境:C++实验目的:编程模拟实现几种常见的进程调度算法,通过对几组进程分别使用不同的调度算法,计算进程的平均周转时间和平均带权周转时间,比较各种算法的性能优劣。

实验内容:编程实现如下算法:1.先来先服务算法;2.短进程优先算法;3.时间片轮转调度算法。

设计分析:程序流程图:1.先来先服务算法2.短进程优先算法3.时间片轮转调度算法实验代码:1.先来先服务算法#include <iostream.h>#define n 20typedef struct{int id; //进程名int atime; //进程到达时间int runtime; //进程运行时间}fcs;void main(){int amount,i,j,diao,huan;fcs f[n];cout<<"请输入进程个数:"<<endl;cin>>amount;for(i=0;i<amount;i++){cout<<"请输入进程名,进程到达时间,进程运行时间:"<<endl; cin>>f[i].id;cin>>f[i].atime;cin>>f[i].runtime;}for(i=0;i<amount;i++) //按进程到达时间的先后排序{ //如果两个进程同时到达,按在屏幕先输入的先运行for(j=0;j<amount-i-1;j++){ if(f[j].atime>f[j+1].atime){diao=f[j].atime;f[j].atime=f[j+1].atime;f[j+1].atime=diao;huan=f[j].id;f[j].id=f[j+1].id;f[j+1].id=huan;}}}for(i=0;i<amount;i++){cout<<"进程:"<<f[i].id<<"从"<<f[i].atime<<"开始"<<","<<"在"<<f[i].atime+f[i].runtime<<"之前结束。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验三 一个任务调度问题
1. 问题描述:
在单处理器上具有期限和惩罚的单位时间任务调度问题.
2. 算法原理:

考虑一个给定的调度. 我们说一个任务在调度迟了, 如果它在规定的时间之后完成; 否
则, 这个任务在该调度中是早的. 一个任意的调度总可以安排成早任务优先的形式, 其中早
的任务总是在迟的任务之前. 为了搞清这一点, 请注意如果某个早任务a(i)跟在某个迟任务
a(j)之后, 就可以交换a(i)和a(j)的位置, 并不影响a(i)是早的a(j)是迟的状态.
类似的,任意一个调度可以安排成一个规范形式, 其中早的任务先于迟的任务, 且按期
限单调递增顺序对早任务进行调度. 为了做到这一点, 将调度安排成早任务优先形式. 然而,
只要在该调度中有两个分别完成于时间k和k+1的早任务a(i)和a(j) 使得d(j)a(i)和a(j)的位置. 因为在交换前任务j是早的, k+1<=d(j) . 所以k+1然是早的. 任务a(j) 被已到了调度中的更前位置,故它在交换后任然是早的.
如此, 寻找最优调度问题就成为找一个由最优调度中早的任务构成的集合A的问题. 一
旦A被确定后, 就可按期限的单调递增顺序列出A中的所有元素,从而给出实际的调度, 然后
按任意顺序列出迟的任务(S-A), 就可以产生出最优调度的一个规范次序.
称一个任务的集合A是独立的, 如果存在关于A中任务的一个调度, 使得没有一个任务
是迟的. 显然, 某一调度中早任务的集合就构成一个独立的任务集.

3. 实验数据:

 输入:
没有输入, 有一个结构体task,系统会随机生成task的期限和惩罚
 输出:

分别输出随机生成task的集合后的早任务集合,迟任务惩罚以及将每个替换为

后的早任务集合,迟任务惩罚.
4. 实验截图:
5. 结果分析:
可以看出将每个替换为 后的早任务集
合基本上包括了没有替换是的早任务集合, 并且替换后的迟任务惩罚大于没有替换时
的迟任务惩罚.

6. 源代码:
 普通排序
/*贪心算法实现单处理器任务调度。
*基本思想是:首先按照惩罚把各个任务降序排序。
*然后遍历任务,逐一确定是否可以放入独立子集A
*/

#include
#include
#include

using namespace std;
#define n 8
struct task
{
int id;//任务标记
int d;//期限
int w;//惩罚
};

void init(task ta[])//初始化任务列表,随机确定任务的截止时间和惩罚
{
srand((unsigned)time(NULL)); //随机数发生器的初始化函数
for (int i = 0; i < n; i++)
{
ta[i].id = i;
ta[i].d = 1 + rand() % 20;
ta[i].w = rand() % 50;
}
}
void print(task ta)
{
cout << "id=" << ta.id << "\td=" << ta.d << "\tw=" << ta.w << endl;
}
void copy(task& t, task s)
{
t.d = s.d;
t.id = s.id;
t.w = s.w;
}
void sortW(task ta[])//对权重进行排序
{
task s;
for (int i = n - 1; i > 0; i--)
{
for (int j = 0; j < i; j++)
{
if (ta[j].w < ta[j + 1].w)//冒泡排序 递减排序
{
copy(s, ta[j]);
copy(ta[j], ta[j + 1]);
copy(ta[j + 1], s);
}
}
}
}
void sortD(task ta[], int k)
{
task s;
for (int i = k - 1; i > 0; i--)
{
for (int j = 0; j{
if (ta[j].d>ta[j + 1].d)
{
copy(s, ta[j]);
copy(ta[j], ta[j + 1]);
copy(ta[j + 1], s);
}
}
}
}
int greedy(task a[], task ta[])//实现贪心算法
{
int max = 0, k = 0, i, j;
int count = 0;
int Nt[n + 1];//Nt[i]记录a[]中截止时间在i之前的任务数
sortW(ta);//按照权重排序
copy(a[0], ta[0]);
max = ta[0].d;
k = 1;
for (i = 0; i <= n; i++)
{
if (i >= a[0].d)
Nt[i] = 1;
else
Nt[i] = 0;
}
for (i = 1; i{
for (j = ta[i].d; j <= n; j++)
{
if (Nt[j] + 1>j)//这种情况下,说明ta[i]不能放入a[]中。
break;
}
if (j == n + 1)//ta[i]可以放入独立子集中
{
copy(a[k], ta[i]);
k++;
for (j = ta[i].d; j <= n; j++)//把ta[i]放入a[]后,要更新Nt[]数组。
{
Nt[j]++;
}
}
}
return k;
}
int getW(task a[], task ta[], int k)//计算延时任务的惩罚
{
int i = 0;
int sum1 = 0, sum2 = 0;
for (i = 0; i < k; i++)
{
sum1 += a[i].w;
}
for (i = 0; i < n; i++)
{
sum2 += ta[i].w;
}
return sum2 - sum1;
}
int main()
{
task tasker[n];//初始任务集合
task A[n];//早任务集合
int i = 0, maxweg = 0, k = 0;
init(tasker);
maxweg = tasker[0].w;
for (i = 0; i < n; i++)//找到最大惩罚值
{
if (maxweg < tasker[i].w)
maxweg = tasker[i].w;
}

k = greedy(A, tasker);
sortD(A, k);//将调度方案按照截止时间进行排序,便于查看算法是否正确执行
cout << "最1242191542优调度方案的早任务为:" << endl;
for (i = 0; i < k; i++)
{
print(A[i]);
}
cout << "迟任务惩罚为:" << getW(A, tasker, k) << endl;

//改变惩罚值重新确定最优调度。
for (i = 0; i < n; i++)
{
tasker[i].w = maxweg - tasker[i].w;
}
k = greedy(A, tasker);
sortD(A, k);
cout << "改变后最优调度方案的早任务为:" << endl;
for (i = 0; i < k; i++)
{
print(A[i]);
}
cout << "改变后迟任务惩罚为:" << getW(A, tasker, k) << endl;
return 0;
}

相关文档
最新文档