【算法设计与分析】 最优服务次序问题

本文探讨了如何通过贪心策略解决一个优化问题,即如何安排服务顺序以使n个顾客的平均等待时间达到最小。算法是将顾客服务时间从小到大排序,依次服务所需时间最短的顾客。通过交换论证证明了贪心策略的正确性,并提供了C++代码实现。最终,算法的时间复杂度为O(nlogn)。

算法课程展示 最优服务次序问题

简介
青岛某高校,信安专业,算法课程第三次课堂展示

问题描述

设有n个顾客同时等待一项服务,顾客i需要服务的时间为t[i](1<= i <=n)。应如何安排n个顾客的服务次序才能使平均等待时间达到最小?平均等待时间是n个顾客等待服务时间总和除以n。

问题解释

//输入样例:
10
56 12 1 99 1000 234 33 55 99 812

样例解释
对于上述样例,如果按照输入顺序进行安排,计算每位顾客的等待时间T(i),T(1)=0,
T(2)=t[1]=56,T(3)=t[1]+t[2]=56+12=68…即每位顾客的等待时间等于前边顾客所需服务时间的总和。

贪心选择策略

每次选取在剩余顾客当中,所需服务时间最短的顾客进行服务。
即将顾客所需的服务时间进行排序,每次选择排序后的第一个顾客进行服务。

贪心策略的证明

本文采取交换论证的证明方法。

交换论证
假设有一个不同于贪心算法的其他算法,得到的问题的最优解,我们交换其他算法中的某些步骤或者变量,使其成为贪心算法,得到的最优解不会变差。

对本题的证明:
t[i] 表示第i个顾客所需的服务时间,T[i]表示第i个顾客所需的等待时间。
根据贪心策略,当i<j时,t[i]<=t[j](由小到大进行排序)

每个顾客的等待时间,T(1)=0,T(2)=t[1],T(3

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值