扎实打牢数据结构算法根基,从此不怕算法面试系列之007 week01 02-07 简单的复杂度分析_热推荐
1、复杂度分析复杂度分析本身是非常理论化的一个内容,在计算机科学中,有一个专门的学科叫做——计算复杂性理论。很多童鞋看过《算法导论》
复杂度分析本身是非常理论化的一个内容,在计算机科学中,有一个专门的学科叫做——计算复杂性理论。
很多童鞋看过《算法导论》,这本书的内容很多很强调算法导论。
但是实际上,对于普通程序员来说,不需要过度强调理论化的内容。因为工作中更多面对的是实际的软件工程,工程化的工作不需要面对太多理论性的东东。
(资料图片)
2、复杂度分析复杂度分析的作用:是为了表示算法的性能。
对于同样一个任务,可能有多个实现方式,即多个算法。这些不同的算法,它们的时间性能是否有差异呢?
我们虽然可以用一个测试用例,或者一组测试用例实际比较性能差异。但是,这样的比较结果有局限性。
比如,需要保证运行不同算法的计算机硬件设备的性能一致,甚至深入的说,他们的OS当时的状态都需要是一致的。这本身很难保证,而且测试结果也与我们的测试用例设计和用例输入相关。
而且,最重要的是这样比较是事后的。
如何突破局限性,如何事前比较呢?种种这样的需求,都需要我们有一套工具,从数学的层面,用抽象的方式,判断一个算法的性能是怎样的?
为了回应这样的需求,就产生了复杂度分析这样一个概念。
3、复杂度分析和算法性能的关系复杂度分析,如何表示算法的性能呢?
需要注意的是,算法复杂度分析通常考虑最坏的情况。
这样的思想非常普遍,比如上班时,为了不迟到,考虑最长需要多少时间,甚至将堵车的时间都考虑进去。
即,复杂度分析,表示的是算法运行的上界。
对于我们的线性查找法代码,我们来进行一个复杂度分析吧,代码再一次贴出来:
public static int search(E [] data,E target){ for (int i = 0; i < data.length; i++) if (data[i].equals(target)) return i; return -1;}
具体的分析过程如下:n = data.lengthT 表示时间T和n的关系到底是怎样的?T = n?n个元素全部扫描了一遍? 就是n?T = 2n?if里有比较、有返回结果这2步 就是2n?T = 3n? 其实if中的data[i],要在数组data中找到i这个元素,是一步寻址,也需要算作一个子步骤。 3n了?T = 4n?for循环中也包含每次要做的事情,i T = 5n?for循环中还有一个i++的操作,所以5n?T = 5n+2? int i =0;加1次,return -1;加1次,所T=5n+2?…… 其实,再继续分析下去还可以分析出很多可能,就不继续分析了,为什么不继续了呢? 因为真的分析的话,拿出for循环对应的汇编代码,看看这个循环执行了多少指令? 可是拿出汇编代码也不够,因为汇编代码对应着机器指令,而机器指令不仅仅是代码有多少行而已,还要追溯到运行代码的CPU架构上,有些复杂指令在有些CPU上,就一个指令,但在另外一些CPU上,可能就是多个指令。 对于上层应用软件开发者来说,分析清楚每一行高级语言代码对应着多少机器指令,是一件非常困难,甚至说不可能的事情,其实也没有必要。 而且即便T=5n+2,那这个等式的时间单位是多少呢?是毫秒ms嘛?肯定不对应时间,对应的是指令数,但是一条指令在cpu中执行多久我们知道嘛? 我们不知道。 所以,这些其实我们都不需要考虑,我们需要进行一个化简。这也是计算机科学家们定义复杂度分析这个概念时做过的事儿,没错,他们做了化简。 我们不需要知道执行这样一个循环,对这n个元素操作,每一次循环需要执行多少个指令;我们只需要知道,整个算法和这个data数组的大小,和这个数据规模n成一个正比的关系即可。 这个就记作O(n),表示的就是运行时间和数据规模n之间的一个正比关系。进一步看,如果:T = c1*n + c2这个算法我们就可以记作O(n),即常数c1、c2都被我们忽略掉了,即算法复杂度的世界中,常数不重要。 复杂度描述的是:随着数据规模的增大,算法性能的变化趋势。 假设有2个算法,分别是T1和T2,它们的详细情况如下: T1 = 10000nT2 = 2n²第一个算法 O(n)级别的算法,第二个算法O(n²)级别的算法。从复杂度理论的角度来看,第一个算法优于第二个算法。 **因为总是会存在某一临界点n0,当n>n0,T1 所以O(n)描述的就是随着n的变化,算法的性能的变化趋势, 而不是说n取某个值时,算法的性能。 实际上,如果测试数据小于5000,比如为100时,第二个算法O(n²)反而优于第一个算法O(n); 但是评价算法性能,我们要看n逐渐上涨的情况,甚至看n无穷大的情况。 关键词:
1、复杂度分析复杂度分析本身是非常理论化的一个内容,在计算机科学中,有一个专门的学科叫做——计算复杂性理论。很多童鞋看过《算法导论》
【美联储博斯蒂克:银行业的紧张局势正在缓解】财联社4月18日电,美联储博斯蒂克表示,如果银行业信贷进一步紧缩,可能会有助
你需要的东西彩绘面板气刷、油漆枪或喷漆罐中的搪瓷漆喷雾瓶中的水较小的水滴使用这种技术效果更好,但大水滴也能发挥作用。水滴
1、作为人类文明的精神家园,大学办学需要一种崇高的精神境界,有一个共同信奉并付诸实践的价值理念,它集中地体现在大学的办学
4月18日,在福州机场出入境边防检查站出境大厅,边检民警为旅客提供通关咨询服务。 宋华龙 摄中新网福州4月18日电(宋华
4月13日,锦绣大道与莲花路交口一名交警正在执勤时遇一位“奶爸”上前求助原来车上宝宝坚决不愿坐安全座椅无奈之下孩子爸爸
今天小编肥嘟来为大家解答以上的问题。分组数据的众数怎么求,众数怎么求相信很多小伙伴还不知道,现在让我们一起来看看吧!1、众数不用算看一
中国国家统计局18日发布一季度经济数据。初步核算,一季度国内生产总值284997亿元,按不变价格计算,同比增长4 5%。
4月18日北向资金增持40 74万股同飞股份。近5个交易日中,获北向资金增持的有4天,累计净增持85 82万股。近20个交易日中,获北向资金增持的有11
云南社工证考试地点在哪考试具体地点以准考证为准。注意事项1、做好疫情防控。应试人员应严格按照新型冠状病毒感染实施“乙类乙管”有关要求,
董瓜呱每天爆的料,比小8每天吃的饭还多,真是上网吃瓜都能把人吃饱。这不,董瓜呱又带着新鲜出炉的瓜向大家走来了!4月18日,董瓜呱爆料了
引读:何超莲窦骁大婚之日,奚梦瑶上热搜:奚梦瑶窦骁还是成了一家人!大家都知道,赌王他的三姨太叫做陈婉珍,有两女一个儿子。而何超莲就是
山西注册会计师考试报名时间在2023年4月6日-28日,专业阶段考试科目是《审计》、《财务成本管理》、《经济法》、《会计》、《公司战略与风险管
2023年4月15至21日是第29个全国肿瘤防治宣传周。宫颈癌是女性常见的恶性肿瘤之一。目前,我国宫颈癌发病率逐年上升,
有惊无险!辽篮13分完胜,郭艾伦25+5,赵继伟13中2,曾凡博13分,方硕,辽篮,郭艾伦,赵继伟,曾凡博,张镇麟,辽宁飞豹,中国体育联赛,国际篮球赛事,
1、你在开始运行处输入cmd,然后输入ipconfig all,可以看到分配的ip的网段。2、然后浏览器输入所看到的网段
一季度消费持续回暖今天的热度非常高,现在也是在热搜榜上了,那么具体的一季度消费持续回暖是什么情况呢,大家可以一起来看看具
新华社北京4月18日电全国人大常委会委员长赵乐际18日在人民大会堂同斯洛伐克国民议会议长科拉尔举行会谈。赵乐际表示,中
04月24日讯根据之前的报道,尼克斯执行副总裁WilliamWesley(新闻配图)以及球员朱利叶斯-兰德尔等人现场观看
23广金K1票面利率为3 0700%