实验1---lx

1问题

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

2问题分析

贪心策略:由于每个顾客i的服务时间为ti,要实现等待服务时间总和最小,应该尽可能安排ti值小的顾客,进行服务。

3问题建模

问题建模:假设原问题的时间为T,已经知道了某个最优服务系列,最优解为min={t(1),t(2),......,t(n)}(其中t(i)为第i个客户需要的服务时间),那么每个客户需要的等待是时间为:

T(1)=t(1);

T(2)=t(1)+t(2);

 ...... 

T(n)=t(1)+t(2)+......+t(n);

那么,总的等待时间,即为最优解 

Tmin=nt(1)+(n-1)t(2)+(n-2)t(3)......+(n+1-i)t(i)+......+2t(n-1)+1t(n)

4算法描述

输入用户等待所需时间列表 将等待时间按从小到大进行排列 利用数学公式Tmin=nt(1)+(n-1)t(2)+(n-2)t(3)......+(n+1-i)t(i)+......+2t(n-1)+1t(n)进行计算得到结果

1.快速排序:a表示待排序数组,l,r表示最左侧/最右侧的索引。x初始化为最左端的元素。

2.计算顾客等待时长:n表示顾客总数,t表示每个顾客的服务时间列表。

代码

def Quick_Sort(a,l,r):
    if(l<r):
        i = l
        j = r
        x = a[l]
        while i<j:
            while i<j and a[j]>=x:
                j-=1
            if i<j:
                a[i] = a[j]
                i+=1
            while i<j and a[i]<x:
                i+=1
            if i<j:
                a[j] = a[i]
                j-=1

        a[i] = x
        Quick_Sort(a,l,i-1)
        Quick_Sort(a,i+1,r)
    return a

def Greedy(n,t):
    wait_time = 0
    wait_stime = 0

    for i in range(0,n):
        wait_time = wait_time + t[i]
        wait_stime = wait_stime + wait_time
        print("第{0}个被选择服务的顾客的服务时间为:{1}, 等待时间为:{2}" .format(i,t[i],wait_time))
    print("顾客等待的总时间为:{0}".format(wait_stime))

if __name__ == '__main__':
    n = eval(input("请输入要服务顾客的总人数:"))
    t = list(eval(input("请输入顾客各自所需的服务时间:")))
    
    l=0
    r=n-1

    t = Quick_Sort(t,l,r)
    Greedy(n,t)

运行结果:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值