求一个排队问题的算法

时间:2008-05-12 11:48:00   来源:论坛整理  作者:  编辑:chinaitzhe
对于单服务台系统,已知到达时间间隔序列arrival[100]和服务时间序列service[
100],求平均顾客数和平均等待时间。

我想了好久也找不到合适的算法,请大虾指点一下~~

多谢了!!
网友回复:严蔚敏的c语言版的数据结构书上面有一个很类似的。
建议先看看那个
网友回复:那个是多服务台的
数据结构也学的不好,所以想先写个简单的

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
/*---------------------------------------------------*/
main()
{int CustomerNum;
int SeqNum;
int serving;
int ArriveTime;
int SeqTime;
int DuraTime;
int DepartTime;
CustomerNum=0; /*初始化顾客人数为0*/
SeqNum=0; /*初始化队列人数为0*/
serving=0; /*初始化服务为闲*/
ArriveTime=0; /*初始化第一个顾客到达时间为0*/
SeqTime=0; /*初始化第一个顾客排队时间为0*/
randomize();
do
{
DuraTime=rand(); /*产生当前顾客需要服务的时间*/
if(serving==0) {CustomerNum ; /*顾客总数加一*/
DepartTime=ArriveTime DuraTime SeqTime; /*若当前服务状态为闲,产生当前顾客离去的时间*/
serving=1; /*并更改当前状态,为当前顾客服务*/
ArriveTime=rand(); /*产生下一顾客到达的时间*/
if (DepartTime-ArriveTime> =0) /* 判定当前顾客离去时间与下一个顾客到来时间*/
{ SeqNum;
SeqTime=DepartTime-ArriveTime;
} /*大于排队*/
else if(DepartTime-ArriveTime <0)
{serving=0;} /*小于直接让当前顾客离去,更改服务状态,为下一顾客服务*/
}

else if(serving==1){serving=0; /*若当前状态为忙,更改当前服务状态,为当前顾客服务*/
}

}while(CustomerNum <100);

printf( "SeqTime:%d\n ",SeqTime);
printf( "AvSeqTime:%f\n ",(float)SeqTime/CustomerNum);
getch();
}

这个是我写的一部分,只能实现一个人在接受服务,一个人在排队,我不能解决多在人排队
谢谢!
我怎么给人分啊?我刚到这老师说了我就来了
网友回复:没有看懂题目意思???
网友回复:所有的值都可以自己设,
题目是这样的:
一个银行有一个窗口,营业开始时,服务员状态为闲,当第一个人到来,状态改为忙,在服务员状态为忙的时候,会又有人来,此时他会看一下前面那个人是否已经离开,并记录下前面那个人的离开时间,然后这个人进队列,计算第二个人的离开时间,同时可计算第二个在队列中等待的时间。然后第三个人可能已经到来,这样又看队列中是否有人,有人进队列;无人,看在接受服务的,然后又进队列。
我就是感觉算法有点乱,写不好算法,若能帮我写个算法也很好,

上面是用事件进行驱动的!!!!!
关键字:一个,排队,问题,算法,

相关文章

文章评论

共有 0 位网友发表了评论 此处只显示部分留言 点击查看完整评论页面