应用办公生活信息教育商业
投稿投诉
商业财经
汽车智能
教育国际
房产环球
信息数码
热点科技
生活手机
晨报新闻
办公软件
科学动态
应用生物
体育时事

如何判断一个算法的好坏?(1)

  回答这个问题之前,我们先来看下,什么是算法?
  我们先来看下百度百科的定义:是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。
  用我们听得懂的话来说,算法其实就是一段的代码。通常我们用这段代码来处理大规模的数据。既然是用来的处理大规模数据的代码,那要评判一个算法的好坏,当然就是要看这个算法执行的快不快,算法在执行过程中使用的空间省不省。
  因此我们再回到刚刚这个问题,如何判断一个算法的好坏?也就意味着,如何判断这个算法运行的快不快?如何判断这个算法使用的空间省不省?
  有人会说,这难道还不简单吗?快不快,省不省,测试环境跑一跑就知道了啊。确实,测试环境跑一跑的确能够通过监控来获取算法执行的时间和占用的内存大小。但是这种跑一跑的方法有很大的局限性。
  首先,测试环境执行算法的结果依赖于测试环境的配置。测试环境的各类硬件设备都可能影响测试结果,比如CPU、内存、网络、存储等等。
  其次,测试结果受数据规模的影响很大。比如有些算法,它的执行效率随着数据规模呈指数级的下降,如果你只是拿小批量的数据去测试,然后得出了这个算法执行效率非常好的结论,那显然是不适合的。
  因此我们需要一种可以不依赖物理环境,可以粗略的估算出算法执行效率的方法,也就是我们今天要聊的时间、空间复杂度分析方法。
  时间复杂度分析方法用来分析算法快不快。空间复杂度分析方法用来分析算法省不省。
  时间复杂度分析
  既然算法就是一段代码,那么我们通过分析代码的复杂度,就自然能够得出算法的复杂度。我们通过一些例子来看一下,代码的时间复杂度怎么分析:
  例1:publicstaticvoidcount(){inta1;intb2;intsumab;}
  这段代码只有3行,每行执行一次。因为只是要粗略的估算代码的执行时间,因此我们假设:屏蔽掉硬件的影响,每行代码执行的时间都是相同的,都为1个时间单位unittime。那么基于这个假设,上面这段代码的执行时间就为3unittime。
  例2:publicstaticvoidcount(){intsum0;for(inti0;i1000;i){sumsumi;}}
  我们可以看到这段代码中,第一行代码只执行了一次,执行时间为1unittime。而第二行、第三行代码是一个循环,需要循环1000次,因此第二行、第三行的代码执行时间为:21000unittime。这段代码执行的总时间为:(121000)unittime。
  例3:publicstaticvoidcount(intn){intsum0;for(inti0;in;i){sumsumi;}}
  这段代码跟例2相比,我们把固定的1000,换成了不固定的参数n,按例2的方式计算,这段代码执行的总时间为:(12n)unittime。
  例4:publicstaticvoidcount(intn){intsum0;for(inti0;in;i){for(intj0;jn;j){sumsumij;}}}
  我们再来分析下例4,第一行代码执行了1次,执行时间为1unittime,第二行代码执行了n次,执行时间为nunittime,第三、四行代码执行nn次,执行时间为2n2unittime,最终这段代码的执行时间为(2n2n1)unittime。
  例5:publicstaticvoidcount(intn){intsum0;for(inti1;in;ii3){sumsumi;}}
  我们再来看下例5,第一行代码执行1次,没有问题。那第二行执行多少次呢?我们假设n为50,那么执行的次数为:i1,i3,i9,i27,转换一下i30,i31,i32,i33。可以看出,我们要计算的次数其实就是3的上标(X)1。
  那么接下来我们就得考虑X需要怎么计算,因为条件中存在in,因此能够执行的最大次数为3n,通过这个公式去求解X,那么就是Xlog3n。
  因此最终这段代码的执行时间为(12log3n)unittime。
  通过上面的这5个例子,我们可以看出,所有代码的执行时间T(n)和所有代码的执行次数成正比。即代码的执行次数越多,所用的执行时间就越长。
  而且,通过上面的例子我们也可以看出:因为代码的具体执行逻辑不同,代码的执行时间跟数据的规模n不是单纯的一元函数关系。
  根据上面这两个特性,我们可以用如下公式来表示算法的时间复杂度:
  T(n)O(f(n))
  其中T(n)代表代码的执行时间;n表示数据的规模;f(n)表示代码的执行次数。O表示代码的执行时间与代码的执行次数成正比。
  用以上的公式来表示例1例5的时间复杂度,分别为:
  例1:T(n)O(3)
  例2:T(n)O(121000)
  例3:T(n)O(12n)
  例4:T(n)O(2n2n1)
  例5:T(n)O(12log3n)
  可以看出,这种使用T(n)O(f(n))的表示方法并不具体表示代码真正的执行时间,因为数据的规模n是可变的,这种表示方法表示的是代码执行时间随数据规模增长的变化趋势,所以这种表示方法又叫做渐进时间复杂度表示法。
  今天,我们介绍了渐进时间复杂度表示法,下期我们将介绍分析代码时间复杂度的几个小技巧和如何分析空间复杂度。

黑色丝袜搭配白色连衣裙,林志玲的小飞机,网友好可爱每个人都有追求时尚的梦想,其实追求时尚的人大多数都是女孩儿,因为女孩儿们都是爱美的,所以都希望永远展现出自己最美的一面。然而要想做的这一点,首先就是让自己一直保持时尚,只有这样……太阳报独家热刺准备冬窗报价戈登埃弗顿要价预计6000万根据太阳报伦敦方面著名记者JackRosser的独家报道,热刺正在考虑在一月份引进埃弗顿边锋安东尼戈登。热刺在今年夏窗的时候就对他很感兴趣,但是太妃糖拒绝了他们的兴趣,同……女副局长和梵克雅宝前段时间,女副局长带着3万的梵克雅宝耳钉亮相发布会,搭配上大波浪和丝巾,衬着她姣好的面容异常显眼。她的家庭背景和财产来源我无意深究,只想扒一扒一个耳钉就要3万元的珠宝品牌梵克雅……瘦脸针有多受欢迎?柳岩王菲大S等女星都曾坦言自己打过如今是一个拼颜值,拼样貌的时代,对于女孩子来说,有着一副娇好的颜值,苗条的身材,的确能够给你以后的生活争夺不少的机会,就比如在找工作找对象的时候,这一点就特别实用。但是有……洗头发,洗一次头还是洗两次头好,差别大吗?不妨了解如今的社会上,很多人为了让自己的头发看上去更加的漂亮,所以非常喜欢烫染焗油等,但这往往也是让发质变得严重的原因。事实上,在头发受损后,你就可以看到它。你不需要触摸它。整个……贝克汉姆20岁的二儿子继承了母亲的高颜值,和父亲一样热爱足球2022年10月,贝克汉姆带着自己的三个孩子一起,前来巴黎观看妻子维多利亚的时秀场。11岁的贝小七打扮成熟宛如小淑女,父亲贝克汉姆亲昵地搂着小七的肩膀,对女儿的爱护溢于言……喜讯!大黑山岛被授予国家4A级旅游景区重磅!大黑山岛荣升国家4A级景区10月27日经地市文化和旅游行政部门推荐山东省文化和旅游厅按程序组织综合评定共有11家旅游景区被确定为国家4A级景……周琦领衔郭艾伦缺席中国男篮公布世预赛第五窗口期集训名单中新社北京10月29日电为备战2023年男篮世界杯亚洲区预选赛第五窗口期的比赛,中国男篮29日公布了新一期集训名单,重返澳大利亚NBL联赛的周琦在列,辽宁队名将郭艾伦、赵继伟缺……姐夫深情的表白,却让我痛苦了一生人的一生,说短不短,说长不长。经历过的过客数不胜数,而真正在身边停留的人却少之又少。然而,真正的危险亦或是真正的诱惑却隐藏其中,尤其是在年少懵懂的年纪,有些错一旦犯下了,就是一……孕妈妈分娩时,如何快速补充体力和精力?在孕妈妈分娩的过程中,蕞幸福的事情大概就是有孩子的爸爸时刻陪伴在身边了吧那么有经验的妈妈肯定都知道生产是一个非常消耗体力和精力的事情,而生产又不是一个小时两个小时就能完成的事情……懂点法律小知识,避免费心劳神一场空大学生自主创业开奶茶店,健康美味生意红火,营业一月竟被罚款,这是为何?小红同学毕业后准备自主创业,做自己人生的主宰者,悄悄惊艳所有人。经过前期的市场调查,小红同学选择了深……知名品牌关闭上海全部门店?网友不舍近日,全上海卡乐星都要关了的消息引发网友热议据悉,卡乐星起源于1941年2009年在上海开设中国大陆首家门店点评网站显示上海的卡乐星门……
对广东队最近的表现,为何篮协没有明确的态度呢?大家好,我是小编帅帅望远镜,今天,我们关注的题目是:对广东队最近的表现,为何篮协没有明确的态度呢?篮协没有表态对打球硬朗球风是错误的,不正确的,说明就是支持打篮球就是要球……西部排行一场111110险胜,让火箭终于摆脱垫底!雷霆惜败强西部排行:一场111110险胜,让火箭终于摆脱垫底!雷霆惜败强队1月25日上午,雷霆对阵公牛,比赛备受关注。因为此役的赛果,事关火箭队的排名。此役,贝兹利、道苏姆相继打成……王者荣耀皮肤效果优化,史诗皮肤自带个性按键,嫦娥拒霜思建模优相信小伙伴们都知道,王者荣耀新赛季很快就要上线了,因此有很多的调整即将上线,现在赶紧来看看吧!首先就是两款皮肤的特定优化,分别是瑶妹的遇见神鹿以及李信的一念神魔。在这两款……比不得杜兰特!进攻防守同时下滑,汤普森终究难成勇士夺冠密码2016年勇士死亡五小夺冠失败之后,他们并没有被失败击倒,反而在那年休赛期迎来了杜兰特的加盟。且在得到杜兰特之后,那两年勇士关键时刻无法得分的缺陷,得到了极大程度上的弥补在水花……甘肃在海外持续圈粉30多国云聚共贺中国年中国甘肃网2月21日讯(本网记者张兰琴通讯员王文江)近年来,甘肃省文旅厅不断走出国门,加强推介宣传,借中国春节,连续多年在海外推介中受到当地民众和媒体关注和推崇。在刚刚过去的虎……也该管管了!明星犯错代价太低,他们的道歉,早就不值钱了这段时间来,许多娱乐圈的明星,都不约而同地做了一件事:道歉,道歉,还是道歉。前有趣店老板罗敏的血腥发家史被扒,陷入争议后,为其直播带货的贾乃亮、傅首尔相继公开道歉。……惊悚了中国男足012惨败,彻底成了笑料近日,中超球队山东泰山和广州队,先后结束了自己本赛季亚冠联赛小组赛的首场比赛,最终的结果并没有带来惊喜,反而是带来了两场惊悚的比赛。先是4月16日凌晨,山东泰山07输球,紧接着……专题报告聚焦美联储议息会议沪铝仍有机会报告摘要:(1)宏观面:美国通胀数据爆表,市场预计美联储加息更激进,金属价格承压。(2)供应端:铝土矿供应偏紧,价格上涨,氧化铝增量明显,转为过剩,电解铝产能在利润……父亲啃他,他啃儿子,这个家族从未逃离童星魔咒童星真是老天爷赏饭吃的。他们总比同龄人更可爱,更聪明,更帅气美丽,也更早熟。他们轻易就领会到大人的指令,导演要求三更哭,童星绝不五更掉泪,真是演什么都灵。成年的明星……2008噩梦重现,千亿大所倒下,币圈雷曼式崩盘正在上演加密机构陆续暴雷,谁将是下一张多米诺骨牌?回望人类的金融史,危机总是惊人的相似,历史总在不断重演。而这次,高举着去中心化金融革命旗帜的币圈也并不例外,甚至危机到来的速度和……王者官方抵制代打,却放任主播代打,这一波双标到底怎么想的?说到代打这个词,想必大家一定都不陌生,代打可以被称作是帮玩家上号进行游戏的一批人。在一些需要肝游戏材料的游戏中,代打叫做代肝,而在需要用技术上分的游戏中,代打叫做代练,不过总的……老风尘的玩儿日记(壹壹柒)一王国纪元元旦跨年2022年1月1日星期六北京晴2022年的第一天!不知道是不是也还有很多人也像我一样,坚守着21年的最后的一班岗在单位跨年!昨天EPIC十五连击的大招终于用完,想要再领到……
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网