算法与数据结构学习笔记-复杂度分析

一、什么是复杂度分析

数据结构和算法本身解决的是如何让代码运行得更快、更节省时间。因此需要从执行时间和空间两个维度来评估数据机构和算法的性能

二、为什么要进行复杂度分析

由于事后统计的测试结果非常依赖测试环境和数据规模。我们可以靠分析在事前对算法和数据结构进行渐进复杂度分析。

三、如何进行复杂度分析

1.大 O 复杂度表示法
1)来源
算法的执行时间与每行代码的执行次数成正比,用T(n) = O(f(n))表示,其中T(n)表示算法执行总时间,f(n)表示每行代码执行总次数,而n往往表示数据的规模。
2)特点
以时间复杂度为例,由于时间复杂度描述的是算法执行时间与数据规模的增长变化趋势,所以常量阶、低阶以及系数实际上对这种增长趋势不产决定性影响,所以在做时间复杂度分析时忽略这些项。
2.复杂度分析方法
1)循环代码:只关注循环次数最多的代码
2)嵌套代码:嵌套内外代码复杂度的乘积
3)多段代码:每段代码做加法

四、常用复杂度级别

多项式阶:随着数据规模的增长,算法的执行时间和空间占用,按照多项式的比例增长。包括:O(1)(常数阶)、O(logn)(对数阶)、O(n)(线性阶)、O(nlogn)(线性对数阶)、O(n^2) (平方阶)、O(n^3) (立方阶)
非多项式阶:随着数据规模的增长,算法的执行时间和空间占用暴增,这类算法性能极差。包括:O(2^n) (指数阶)、O(n!) (阶乘阶)

五、复杂度的几个概念

同一段代码,会因为输入的不同,复杂度量级会有不同。复杂度有几个概念:

最好情况时间复杂度:代码执行最短的复杂度
最坏情况时间复杂度:代码执行时间最长的复杂度
平均情况时间复杂度:输入情况及相应的发生概率,然后再计算加权平均值
均摊时间复杂度:当高级别的复杂度概率较低时可以均摊到低级别的复杂度,最后用低级别的复杂度表示

掌握这4个概念,能更好的分析出代码的在不同输入下的复杂度

    原文作者:Reiser实验室
    原文地址: https://www.jianshu.com/p/e2d1445af60d
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞