贪心问题(Python代码实现)——磁带最优存储问题


今早任务——贪心算法,Python代码实现算法课的作业。

磁带最优存储问题

设有n 个程序{1,2,…, n }要存放在长度为L的磁带上。程序i存放在磁带上的长度是Li, 1≤i≤n。这n 个程序的读取概率分别是p1,p2,…,pn,且p1+p2+…+pn = 1。如果将这n 个程序按 1,2,…,n 的次序存放,则读取程序i所需的时间tr=c*(P1×L1+P2×L2+…+Pr×Lr)。这n 个程序的平均读取时间为 t1+t2+…+tn。实际上第k个程序的读取概率为ak/(a1+a2+…+an)。对所有输入均假定c=1。磁带最优存储问题要求确定这n个程序在磁带上的一个存储次序,使平均读取时间达到最小。试设计一个解此问题的算法,并分析算法的正确性和计算复杂性。

要求:先写出贪心策略,问题建模,Python编写代码,测试数据,测试结果。

贪心策略

每个程序的读取时间都应该找最短

问题模型
  1. 计算每个程序的长度和读取概率的乘积。
  2. 对1.产生的结果进行排序。
  3. 当访问次序确定时,求出每个程序的访问时间。
  4. 求出n个程序的平均读取时间。

输入:

第一行一个整数 n
每行有两个整数ai,bi分别表示程序存放在磁带上的长度和读取概率。

输出:
一个结果 表示计算出的最小平均读取时间。

python实现代码
def Sort(a):
    ans=True
    flag=len(a)-1
    while flag>0 and ans:
        ans=False
        for i in range(flag):
            if a[i]>a[i+1]:
                ans=True
                temp=a[i]
                a[i]=a[i+1]
                a[i+1]=temp
  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值