多处最优服务问题(final)

上传人:汽*** 文档编号:564808064 上传时间:2023-10-21 格式:DOC 页数:6 大小:67KB
返回 下载 相关 举报
多处最优服务问题(final)_第1页
第1页 / 共6页
多处最优服务问题(final)_第2页
第2页 / 共6页
多处最优服务问题(final)_第3页
第3页 / 共6页
多处最优服务问题(final)_第4页
第4页 / 共6页
多处最优服务问题(final)_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《多处最优服务问题(final)》由会员分享,可在线阅读,更多相关《多处最优服务问题(final)(6页珍藏版)》请在金锄头文库上搜索。

1、精选优质文档-倾情为你奉上算法实现题4-7 多处最优服务次序问题 问题描述:设有n 个顾客同时等待一项服务。顾客i需要的服务时间为ti, 1i n 。共有s处可以提供此服务。应如何安排n个顾客的服务次序才能使平均等待时间达到最小?平均等待时间是n 个顾客等待服务时间的总和除以n。编程任务:对于给定的n个顾客需要的服务时间和s的值,编程计算最优服务次序。数据输入:由文件input.txt给出输入数据。第一行有2 个正整数n 和s,表示有n 个顾客且有s 处可以提供顾客需要的服务。接下来的1 行中,有n个正整数,表示n个顾客需要的服务时间。结果输出:将编程计算出的最小平均等待时间输出到文件outp

2、ut.txt。输入示例input.txt10 256 12 1 99 1000 234 33 55 99 812输出示例output.txt336#include #include using namespace std;typedef struct Jobint ID;int time;Job;typedef struct JobNodeint ID;int time;JobNode *next;JobNode,*pJobNode;typedef struct Headerint s;JobNode *next;Header,pHeader;int main()void QuickSort(

3、Job *job,int left,int right);void outSort(Job *job,int n);void display(Header *M,int m,int n);void solve(Header *head,Job *job,int n,int m);int m,n;coutttn;coutm;Header *head= new Headerm;cout n;Job *job = new Jobn;coutn请按序号输入每个作业调度需要的时间:;for(int i=0;ijobi.time;jobi.ID=i;QuickSort(job,0,n-1);outSort

4、(job,n);solve(head,job,n,m);display(head,m,n);coutendlendl;return 0;int SelectMin(Header *M,int m)int k=0;for(int i=1;im;i+)if(Mi.sMk.s)k=i;return k;void QuickSort(Job *job,int left,int right)int middle=0,i=left,j=right;Job itemp;middle=job(left+right)/2.time;dowhile(jobi.timemiddle)&(imiddle)&(jlef

5、t) j-;if(i=j)itemp = jobj;jobj = jobi;jobi = itemp;i+;j-;while(i=j);if(lefti) QuickSort(job,i,right);void display(Header *M,int m,int n)int *total = new intm;int *current= new intm;for(int j=0;jm;j+)totalj=0;for(j=0;jm;j+)currentj=0;double average=0;JobNode *p;for(int i=0;im;i+)coutn第i台机器上处理的工作序号:;i

6、f(Mi.next = 0)continue;p=Mi.next;docoutIDtime;totali=totali+currenti;/cout(totalinext;while(p!=0);coutendl;for(j=0;jm;j+)average+=totalj;cout平均时间:average/n;void outSort(Job *job,int n)coutn按工作时间由小到大为:n时间:t;for(int i=0;in;i+)coutsetw(4)jobi.time;coutn序号:t;for(i=0;in;i+)coutsetw(4)jobi.ID;void solve(H

7、eader *head,Job *job,int n,int m)int k;for (int i=0;im&itime = jobi.time;jobnode-ID = jobi.ID;jobnode-next= 0;headi.s = jobnode-time;headi.next=jobnode;if(i=m)for(i;im)for(i;itime = jobi.time;jobnode-ID = jobi.ID;jobnode-next = 0;k = SelectMin(head,m);p = headk.next;headk.s += jobnode-time;while(p-n

8、ext!=0)p=p-next;p-next=jobnode;(注解:很多人会对这道题中平均等待服务时间不理解,下面我解释一下变做出这道题的具体运算过程.一个顾客的等待服务时间是顾客的等待时间加上这个顾客的服务时间,学过操作系统的同学应该明白进程的周转时间吧, 说的好像只有顾客的等待时间而没有服务时间,这也是悲催的原因吧。下面说下此程序的运算过程:11125131510013041899035345699812Total0=total+current0Current0=current0+812Total0=total+current0Current0=current0+99Total0=total+current0Current0=current0+56Total0=total+current0Current0=current0+33Total0=total+current0Current0=current0+1133队列1专心-专注-专业

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 教学/培训

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号