贪心法:最优服务次序

本文探讨了如何使用贪心算法解决最优服务次序问题,以最小化顾客的平均等待时间。通过将顾客服务时间排序并优先处理时间短的顾客,可以有效地减少总体等待时间。算法实例展示了具体的实现过程,最终得出平均等待时间和服务次序。时间复杂度分析为O(nlogn)。
摘要由CSDN通过智能技术生成

贪心法求解最优服务次序问题-设有n个顾客同时等待一项服务。顾客i需要的服务时间为ti, 1≦i ≦n,共有s处可以提供此服务。应如何安排n个顾客的服务次序才能使平均等待时间达到最小? 平均等待时间是n个顾客等待服务时间的总和除以n。

算法思想:
将所有顾客的服务时间进行从小到大排序,要使平均等待时间最小就要使总的等待时间最小,因此优先服务服务时间较小的顾客,将服务时间较大的顾客往后排,这样使得总的等待时间最小。

算法实例:10 3
6 9 1 5 12 32 58 42 13 4
输入顾客数目10,服务处数目3

输入顾客数目10,服务处数目3
进入for循环i从0到9
对顾客i排序,即t[i].m=i+1
初始化顾客m的等待时间为0,即t[i].wait_time=0
输入顾客m的服务时间
for循环结束后调用函数fun(n,s,t)
进入fun函数,对结构体数组t根据服务时间进行从小到大排序,此处排序后的结果为:
数组下标:1 2 3 4 5 6 7 8 9 10
顾客序号:3 10 4 1 2 5 9 6 8 7
服务时间:1 4 5 6 9 12 13 32 42 58
构造二维结构体数组a,将其每一位的每一项的值初始化为0
令q=0,sum=0
进入for循环,i从0到q<n
进入内层for循环,j从0到s以及q<n
将t[q]的值赋给a[j][i],此处a[0][0]=t[0]
判断j是否等于0,是则a[j][i].wait_time = a[j][i - 1].ser_time + a[j][i - 1].wait_time,此处j=0,不进行运算
运算总的等待时间sum = sum + a[j][i].wait_time,q++
同理,不断运算,直到两个for循环结束为止
此处运算结束后,a为:
a的列值:0 1 2 3
服务处0:3 1 9 7
服务处1:10 2 6
服务处2:4 5 8
计算平均等待时间sum = sum / n,此处sum=67/10=6.7
输出平均等待时间以及服务次序

运行截图

结构体:
typedef struct {
       //定义结构体记录每个顾客的序号、服务时间、等待时间
    int 序号;
    int 服务时间;
    int 等待时间;
}service
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值