今早任务——贪心算法,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.产生的结果进行排序。
- 当访问次序确定时,求出每个程序的访问时间。
- 求出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