如何进行数据结构与算法中的时间与空间复杂度分析
如何进行数据结构与算法中的时间与空间复杂度分析,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
下面主要是对底层的数据结构与算法部分进行详尽的讲解,今天我们来一起探讨一下复杂度相关的问题,提到时间复杂度,不知各位第一反应是什么,比如:不就是用时间换取空间,或者用空间来换取时间吗,恩恩,你说的呢不能算错。
问题1:什么是算法的复杂度分析?
我呢,从一下几个方面进行一下阐述:
其一,复杂度描述的是算法的执行时间(或者所占内存或者磁盘的空间)与数据的规模的增长之间的一种关系。
其二,它是要解决:how to 让计算机更加的快速且省存储空间的情况下解决你所设定的问题。
其三,评估其性能的指标:时间复杂度和空间复杂度。
问题2:为什么要进行算法的复杂度分析?
其一,与测试工程师在实际的生产环境中做的测试相比较而言,复杂度的分析不需要执行环境、且易操作、几乎没成本。so,作为开发工程师做复杂度的分析也是很容易实现的。
其二,还是我开篇说的那就话,从此你就会远离垃圾代码,让你在程序员中与众不同!
问题3:如何进行算法的复杂度分析?
其一,使用大O表示法
算法的执行时间与每行代码的执行次数成正比,用T(n)=O(f(n)),进行表示,其中T(n)表示算法执行总的时间,f(n)表示每行代码执行的总的次数,n代表数据的规模。
其二,算法复杂度分析准则:
1.单段代码的时间复杂度看执行次数最多的那一条或者几条:比如:for 或者while循环中的语句。
2.若有很多的代码,则分析最大循环嵌套的部分:比如代码的第1行到10行 中只有一个for循环,在14到30行之间存在for循环中嵌套for循环,则此时就要去分析的for循环嵌套for循环的这部分内容。
3.嵌套代码求乘积:比如递归调用的代码,多重循环的代码。
4.多个规模的情况使用加法法则处理。
其三,常见的算法复杂度:
多项式阶:随着数据的规模的增长,算法的执行时间和所占空间,按照多项式的比例增长。eg:
O(1) 常数阶
O(logn) 对数阶
O(n) 线性阶
O(nlogn) 线性对数阶
O(n^2) 平方阶
O(n^3)立方阶
常用的基本就包含这些。
非多项式阶:随着数据的规模的增长,算法的执行时间与所占空间暴增,这种的代码就性能极差了。
主要包括:
O(2^n) 指数阶
O(n!) 阶乘阶
看完上述内容,你们掌握如何进行数据结构与算法中的时间与空间复杂度分析的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!