范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

Python实现枚举算法一波三折的优化

  #头条创作挑战赛#昨天看到这样一个例子,一辆车肇事逃逸,现场有三个目击证人,第一个说我看到车牌的前两位数字一样,第二个说我看到车牌的后两位数字一样,但和前面的数字不同,第三个说车牌的四位数刚好等于一个数的平方。根据以上信息找出符合条件的四位数车牌号。
  书上给出的算法是,首先列举前两位所有可能的数字(从0到9),然后在此基础上列举后两位所有的可能(从0到9),得到所有可能的四位数,再逐一判定这些四位数是否符合条件,条件当然就是该四位数等于某个数的平方。代码如下。import time     #导入time库,测试一下该程序的效率 flog = 0        #设置一个标志,用来判断是否找到目标值 start1 = time.perf_counter()    #记录程序开始运行时间 for i in range(10):        #从0到9枚举所有可能的值,这里是前两位     if flog:               #判断是否找到目标值,如果找到结束循环         break     for j in range(10):    #从0到9枚举后两位所有可能的值         if flog:           #判断是否找到目标值,如果找到结束循环             break         if i != j:         #判断是否满足前两位数不等于后两位,             k = 1000 * i + 100 * i + 10 * j + j #如果符合,给出所有可能的四位数             for temp in range(32, 100): #列举完全平方数是四位数的所有数                 if temp * temp == k:    #判断该四位数是否等于完全平方数                     print(k)            #输出符合条件的四位数                     flog = 1            #把标志设置为已找到                     break               #结束当前循环 end1 = time.perf_counter()    #记录程序运行结束的时间 print(end1 - start1)          #输出程序执行时间
  找到的四位数:7744
  程序运行时间:0.0008686760011187289
  如果没有break,最外层循环将执行10次,每一次外层循环第二层循环都将执行10次,第二层循环执行一次最内层循环将执行68次(100-32=68,循环只在满足外层i不等于第二层j的条件下执行),所以该程序并没有执行10*10*68=6800次,而是10*9*68=6120次。每一层循环都要判断是否找到目标值,找到的话用break终止循环(break只能终止当前层的循环)
  程序运行过程如下:
  i: 0 j: 1 k: 11
  i: 0 j: 2 k: 22
  i: 0 j: 3 k: 33
  ……
  i: 0 j: 9 k: 99
  i: 1 j: 0 k: 1100
  i: 1 j: 2 k: 1122 这里跳过了1111,因为前后不能相等
  ……
  i: 7 j: 4 k: 7744
  7744 如果使用break的话,那么程序运行到此为止。
  i: 7 j: 5 k: 7755
  i: 7 j: 6 k: 7766
  ……
  i: 8 j: 6 k: 8866
  i: 8 j: 7 k: 8877
  i: 8 j: 9 k: 8899
  ……
  i: 9 j: 8 k: 9988
  本题是不是一定要使用三层嵌套循环?能否对程序改进优化呢?  下面尝试从找出的完全平方数中寻找符合条件的答案,也就是从第三个条件出发去找符合第一、二个条件的值,程序如下所示。import time   #导入时间库 p=[i for i in range(4)]   #初始化列表p,p中用来存放可能的四位数中每一位的数值 start=time.perf_counter() #记录程序开始运行时间 for i in range(32,100):   #枚举所有完全平方后是四位数的     t=i*i                 #计算出所有可能的四位数     for j in range(4):    #依次取出组成四位数的每一位数         p[j]=t%(10**(j+1))//(10**j)  #通过求余加整除的方式得出每一位     if p[0]==p[1] and p[2]==p[3] and p[0]!=p[2]: #判断前两位相同,并且后两位相同,并且前后不同的四位数         print(t)          #输出符合条件的四位数         break             #结束循环 end=time.perf_counter()   #记录程序结束时间 print(end-start)          #输出所用时间
  找到的四位数:7744
  程序运行时间:0.0002392329988651909
  如果没有break语句,该程序应该执行272次,外层循环执行68次,每执行一次内层循环执行4次,68*4=272。
  程序还能不能进一步优化改进呢?  还是可以的,借助字符串实现快速查找和比对,而不用执行内循环,代码如下所示。import time   #导入时间库 start=time.perf_counter()  #记录程序开始运行时间 for i in range(32,100):    #依次读取每一个经过完全平方可以得到四位数的值     t=i*i                  #计算得到每一个四位的完全平方数     t1=str(t)              #把四位数值转化为字符串     if t1[0]==t1[1] and t1[2]==t1[3] and t1[0]!=t1[2]: #通过字符切片判断前两位相同,     #后两位相同,但前后不同的数         print(t)           #输出符合结果的四位数         break              #结束循环 end=time.perf_counter()    #记录程序结束时间 print(end-start)           #输出程序运行时间
  找到的四位数:7744
  程序运行时间:4.287200135877356e-05
  这个程序只有一层循环68次,每执行一次都需要使用Python内置的字符串操作,不过运行时间是三个程序中最短的。

美国对中国出口管制,光刻机巨头突然表态,不应孤立中国长期以来美国对我国在许多先进技术上都进行一定的封锁和制裁,关于这类大家都已经很清楚地知道了,好在我国凭自己的实力打破了一个个封锁,现在还纵身一跃成为了国际大国。而且在许多方面,现在5年1。9亿,场均12分3板2助,回不去了,你甘愿主动降薪是明智的NBA新赛季,常规赛现在打得很激烈,金州勇士队和快船队虽然作为全联盟最贵的豪阵,但是他们开赛战绩都不太好。勇士队输给黄蜂队之后,3胜3负的战绩,只排西部第九名。快船队更惨,三连败,中国男篮公布名单,辽宁男篮集体被抛弃,这3人落选太可惜北京时间10月29日,CBA官方发布处罚公告,在被宣判技术犯规和离开场地过程中,程帅澎对裁判员做出的不当言行,给联赛造成了负面影响。对浙江队球员程帅澎,处以罚款人民币5万元停赛1场仅2场42分钟就玩消失?小卡突然与快船闹崩,这次轮到马刺看笑话直到伦纳德加盟快船之后,很多人对于当初伦纳德与马刺队的闹剧都处于两极分化,有些人认为马刺队对待小卡的健康毫无尊重,只想让他带伤在季后赛中复出有些人认为小卡缺乏职业道德,即使是受伤的早上洗头和晚上洗头,有什么不同?这几点你要清楚,小心发质变差都说头发是人们的第二张脸,随着社会的进步,越来越多的人注意对自己的投资和保养,从之前的吃饱穿暖,再到如今的吃好穿好,对自身的保养更是不容忽视的。一个人的头发是对一个人的形象起着决定先油后水乳肤感不好,小技巧奉上记得昨天我写了一篇以油养肤的文章提到过洗漱完可以先油后水乳,可以辅助多余的精华油吸收,避免停留在表皮引起后续的搓泥。后台有一些留言反馈还是有点黏糊糊的,比直接上水乳好一些。说起手法戴墨镜的人戴墨镜都是什么人呢?据说在中国古代判官在审案时佩戴烟熏过的石英镜片来掩盖神色,使得堂上人员无法揣摩判官意见。新中国改革开放期间,基本上墨镜就是混混,小流氓和倒爷的代名词,墨镜那时有写给每一个挣扎生活的年轻人我总是失败怎么办?答案请参见法则一我总是委屈自己满足别人怎么办?答案请参见法则二我更好的朋友堕落了怎么办?答案请参见法则三我比别人差怎么办?答案请参见法则四我没法对孩子说不怎么办?一位80岁老人的醒悟走到生命终点才明白,此生善待一人就赢了图源自网络侵权请联系删除其实,很多人终其一生都在追求错误的东西,他们活了一辈子,也没有活明白。比如他们盲目追求名利,任凭自己内心的欲望不断滋长,以为挣很多钱就是成功,以为被人羡慕,真希望你也喜欢自己房琪记得第一次认识她时,还是看到她的戳心文案,等真正了解她时才知道,她也是和我们普通女孩一样,也经历过人生的至暗时刻,高考落榜复读,艺考因长相不合适被淘汰,就这样一个平凡女孩经历嘲一个人一张票一个站(生命中,总有某个人,在某处默默等候着。幻想有一天,能够真正相遇。茫茫人海如果能相遇,那就是缘份。)时间总在改变一切。每一天都有不同。秋天终将换装,褪去最后的绚丽。在淡淡的秋光里,
联盟第一!单场15助攻0失误,保罗接班人诞生,这笔交易互利双赢克里斯保罗,NBA联盟最强的助攻王,保罗生涯5次夺得年度助攻王的称号,6次夺得年度抢断王的称号,外加4次最佳一阵7次最佳防守一阵。库里评价保罗都说控卫之神!美媒发布数据统计,保罗生金国以九公封建对抗蒙宋联盟的最后结局恒山公武仙我是小树,点击上方关注,每天为您分享精品历史故事与真实历史事件揭秘干货。本来想着按照封建九公的顺序一一给大家伙介绍一下,但是这两天有粉丝急电,说是忍不了了必须先给讲一下道士下山武仙花了30年,中国空间站才追赶上别人,载人航天的意义究竟在哪儿?根据此前央视网发布的最新消息来看,神舟十五号飞船将在11月29日晚上23点左右发射。这就意味着,又有新的航天员要去太空中执行任务了,他们主要任务还是建设天宫空间站,或者说是为其进行祝贺神十五发射成功!航天员太空会师!西工大人再立新功!北京时间2022年11月29日23时08分,搭载神舟十五号载人飞船的长征二号F遥十五运载火箭在酒泉卫星发射中心点火发射,约10分钟后,神舟十五号载人飞船与火箭成功分离,进入预定轨道我们常说放下,究竟是放下什么?(看完顿悟)导读我们执着了太多让我们产生烦恼和痛苦的东西。从今天起,学会放下那些对负能量的东西,改变自己。你准备好了吗?我们现在就开始吧。1放下争论对错。有许多人不能认识到自己也是犯错的,而是打通动力电池回收关键堵点随着我国电动汽车步入规模化普及发展阶段,退役动力电池回收利用问题受到广泛关注。11月份以来,碳酸锂价格创下60万元吨的价格新高,动力电池回收利用显得更为迫切。近日,工信部就拟公告的VideoMAE简单高效的视频自监督预训练新范式NeurIPS2022作者童湛编辑QQ新智元导读本文将介绍南大腾讯和上海人工智能实验室被NeurIPS2022收录的工作。论文链接httpsarxiv。orgabs2203。12602代码和预训练权重已新能源汽车电池衰减怎么办?国家大力发展电动车,但是电池使用五年之后效率大幅降低,而更换电池费用又过高,到时候又该怎么处理呢?就像手机一样,电池用一阵以后续航大幅度下降,到时候二手车没人买,换电池又要10万,硬核!陕西科研团队实现水中硝酸盐高效去除,引发国际关注近期,陕西科技大学环境科学与工程学院朱云庆副教授课题组在光电催化降解水中新兴污染物和去除硝酸盐技术方面取得系列成果,在国际权威期刊AppliedCatalysisBEnvironm快讯!中石油投资成立新能源公司,经营范围含电池制造中国经济周刊经济网讯天眼查App显示,近日,中油绿电新能源有限公司成立,法定代表人为张濛,注册资本6000万人民币,经营范围含新能源汽车电附件销售充电桩销售输配电及控制设备制造电池中石油造电池!正式进军新能源领域中国石油投资设立新公司,经营范围包含电池制造销售以及租赁等。根据查询,中国石油已经投资并设立了新公司,经营范围包括电动汽车充电基础设施运营电池销售电池制造蓄电池租赁等,并且于近期刚