算法课程展示 最优服务次序问题
简介:
青岛某高校,信安专业,算法课程第三次课堂展示
问题描述
设有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

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

被折叠的 条评论
为什么被折叠?



