文章目录

  • 磁带最优存储问题
  • 贪心策略
  • 问题模型
  • python实现代码
  • Python知识小结
    • 关于Python sort
    • sort()与sorted()的区别

今早任务——贪心算法,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=Trueflag=len(a)-1while flag>0 and ans:ans=Falsefor i in range(flag):if a[i]>a[i+1]:ans=Truetemp=a[i]a[i]=a[i+1]a[i+1]=tempflag-=1
def greed():for i in range(n):# print(i)t[i]=a[i]*b[i]
#        print(t[i])Sort(t)
#    for i in range(n):
#        print(t[i])for i in range(1,n):t[i]+=t[i-1]#       print(t[i-1])to=int(0)tp=float(0.0)for i in range(n):to+=t[i]tp+=b[i]
#    print(to)#   print(tp)w=float(to)/tpprint(w)
# def main():
# if __name__=="__main__":
n= int(input())
i=int(0)
w=float(0.0)
t=[0]*n#
a=[0]*n#
b=[0]*n#
for i in range(n):a[i],b[i]=map(int,input().split(' '))
greed()
# print(a)
# print(b)
#6
#72 873
#46 462
#9 275
#73 122
#35 84
#23 21
#86.61458900381056

Python知识小结

回顾Python的知识

列表

  1. 清空是 t=[0]*n
  2. for i in range(1,n):# 从1开始,到n-1 左闭右开
  3. a[i],b[i]=map(int,input().split(’ '))//列表输入 两个列表一起 就是 2 4 这个格式的输入
  4. a=a = list(map(int, input().split(’ '))) # 单个列表的输入
关于Python sort
  1. list .sort(reverse=True) 降序 排序
  2. 初始为升序排序 list.sort()
sort()与sorted()的区别
  1. 就是sorted() 函数也不会改变所传入的可迭代对象,该函数只是返回一个新的、排序好的列表。
>>> x =[4, 6, 2, 1, 7, 9]
>>> y = sorted(x)
>>> print (y)
[1, 2, 4, 6, 7, 9]
>>> print (x )
[4, 6, 2, 1, 7, 9] 
  1. sorted() 函数时,传入一个 reverse 参数,如果将该参数设置为 True,则表示反向排序
>>> sorted(a, reverse = True)
[90, 30, 20, 3.6, 3.5, -1.2]
  1. 调用 sorted() 函数时,还可传入一个 key 参数,该参数可指定一个函数来生成排序的关键值
>>> b = ['fkit', 'crazyit', 'charlie', 'fox', 'Emily']
>>> sorted(b, key = len)
['fox', 'fkit', 'Emily', 'crazyit', 'charlie']

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

  1. 贪心算法-磁带最优存储问题

    贪心算法通常是对某一值进行排序,然后再采取贪心策略进行求解.此问题贪心角度不同以往,它是对两因素进行综合处理.将它们的乘积进行排序. 题意:设有n 个程序{1,2,-, n }要存放在长度为L的磁带上 ...

  2. 贪心:磁带最优存储与磁盘文件最优存储

    1.磁带最优存储问题 Input: 5 71 872 46 452 9 265 73 120 35 87 Output: 85.6193 Code: #include <bits/stdc++. ...

  3. 算法设计与分析: 4-3 磁带最优存储问题

    4-3 磁带最优存储问题 问题描述 设有 n 个程序{1,2,...,n}{1,2,...,n}\{1,2,..., n\}要存放在长度为 L 的磁带上.程序 i 存放在磁带上的长度是 lilil_i ...

  4. 磁盘最优存储与磁带最优存储问题

    磁带最优存储 题目描述 设有n 个程序{1,2,-, n }要存放在长度为L的磁带上.程序i存放在磁带上的长度是Li, 1<= i<= n.这n 个程序的读取概率分别是p1,p2,-,pn ...

  5. 磁带最优存储问题java实现_磁带的最优存储问题(贪心选择)

    算法设计 n个程序的平均读取时间:(贪心策略) 在该题目中,要考虑综合因素:长度和读取概率.要求n个程序的平均读取时间最短.按照贪心策略,则每个程序的读取时间都应该最短.故: (1)计算每个程序的长度 ...

  6. 算法复习之磁带最优储存问题

    题目描述 设有n 个程序{1,2,-, n }要存放在长度为L的磁带上.程序i存放在磁带上的长度是Li, 1<= i<= n.这n 个程序的读取概率分别是p1,p2,-,pn,且pi+p2 ...

  7. 磁盘最优存储问题【贪心算法】

    题目描述 设有n 个程序{1,2,-, n }要存放在长度为L的磁带上.程序i存放在磁带上的长度是Li, 1<= i<= n.这n 个程序的读取概率分别是p1,p2,...,pn,且pi+ ...

  8. 磁盘最优存储问题---Python

    题目描述 设有n 个程序{1,2,-, n }要存放在长度为L的磁带上.程序i存放在磁带上的长度是Li, 1<= i<= n.这n 个程序的读取概率分别是p1,p2,-,pn,且pi+p2 ...

  9. XGBoost参数调优完全指南(附Python代码)

    XGBoost参数调优完全指南(附Python代码) 译注:文内提供的代码和运行结果有一定差异,可以从这里下载完整代码对照参考.另外,我自己跟着教程做的时候,发现我的库无法解析字符串类型的特征,所以只 ...

最新文章

  1. is this mysql server_远程连接MySQL数据库报错:is not allowed to connect to this MYSQL server的解决办法...
  2. MasterPage技术
  3. word文档插入行号
  4. rust(43)-rust语言特点与版本发布
  5. VTK:PolyData之FitSplineToCutterOutput
  6. Redis源码剖析(十)简单动态字符串sds
  7. html如何制作滑块,网页制作html5实现滑块功能之type=quot;rangequot;属性-建站-建站教程-建站方法-米云建站 - 米云问答...
  8. 【Express】—Express路由请求
  9. SSH远程管理、参数讲解、xshell使用、scp,sftp,ssh命令(ssh两种方式的密钥验证方...
  10. Kaggle泰坦尼克号幸存者预测
  11. 如何向Oracle数据库中插入带有特殊符号“”的数据
  12. Java现在好找工作吗?
  13. 我在公司彻夜撸码,老板天天开X6夜店蹦迪,到头来工资还拖欠
  14. 【转载】 身份证号码校验(15位和18位都可以)
  15. OpenCV实战——基于GrabCut算法的图像分割
  16. flash---星星闪
  17. 从滚动条到画布的几个代码文件——Python学习笔记之十七
  18. 各大股票开放接口介绍
  19. python爬取糗事百科超搞笑图片
  20. jaeger php,全链路监控Jaeger搭建实战

热门文章

  1. 求子集PHP,JavaScript求非空子集数目的实现方法
  2. 蒲公英 · 积跬步以至千里
  3. 技术分享1: jinkens构建Android工程,并上传到蒲公英平台
  4. 微信小程序业务好(做)跑吗?我想做小程序代理业务
  5. Python人脸识别图片视频
  6. 【编译原理】Python实现对一个英文文本的词频统计
  7. 用计算机排序excel,【用excel名字排序的方法有哪些?这些简便的计算机技能你一定需要】- 环球网校...
  8. c语言 最长单词,c语言求最长公共单词
  9. 找字符串中最长单词C语言,C语言 在已知字符串中找最长单词
  10. C++实践 极简版本贪吃蛇小游戏