算法的时间复杂度和空间复杂度分析

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Luomingkui1109/article/details/88193053

    其实,只要讲到数据结构与算法,就一定离不开时间、空间复杂度分析。而且我个人认为,复杂度分析是整个算法学习的精髓,只要掌握了它,数据结构和算法的内容基本上就掌握了一半。

1.时间复杂度分析

     对于刚才罗列的复杂度量级,我们可以粗略地分为两类,多项式量级和非多项式量级。其中,非多项式量级只有两个:O(2n) 和 O(n!)。当数据规模 n 越来越大时,非多项式量级算法的执行时间会急剧增加,求解问题的执行时间会无限增长。所以,非多项式时间复杂度的算法其实是非常低效的算法。

2.空间复杂度分析

     时间复杂度的全称是渐进时间复杂度,表示算法的执行时间与数据规模之间的增长关系。类比一下,空间复杂度全称就是渐进空间复杂度(asymptotic space complexity),表示算法的存储空间与数据规模之间的增长关系。

3. 最好,最坏,平均,均摊时间复杂度

3.1 复杂度分析的4个概念

扫描二维码关注公众号,回复: 6143301 查看本文章

    • 最坏情况时间复杂度:代码在最理想情况下执行的时间复杂度。

    • 最好情况时间复杂度:代码在最坏情况下执行的时间复杂度。

    • 平均时间复杂度:用代码在所有情况下执行的次数的加权平均值表示。

    • 均摊时间复杂度:在代码执行的所有复杂度情况中绝大部分是低级别的复杂度,个别情况是高级别复杂度且发生具有时序关系时,可以将个别高级别复杂度均摊到低级 别复杂度上。基本上均摊结果就等于低级别复杂度。

3.2 为什么要引入这4个概念?

    • 同一段代码在不同情况下时间复杂度会出现量级差异,为了更全面,更准确的描述代码的时间复杂度,所以引入这4个概念。

    • 代码复杂度在不同情况下出现量级差别时才需要区別这四种复杂度。大多数情况下,是不需要区别分析它们的。

3.3 如何分析平均、均摊时间复杂度?

    • 平均时间复杂度:代码在不同情况下复杂度出现量级差别,则用代码所有可能情况下执行次数的加权平均值表示。

    • 均摊时间复杂度:两个条件满足时使用:1)代码在绝大多数情况下是低级 别复杂度,只有极少数情况是高级别复杂度;2)低级别和高级别复杂度出现具有时序规律。均摊结果一般都等于低级别复杂度.

4.内容小结

    复杂度也叫渐进复杂度,包括时间复杂度和空间复杂度,用来分析算法执行效率与数据规模之间的增长关系,可以粗略地表示,越高阶复杂度的算法,执行效率越低。常见的复杂度并不多,从低阶到高阶有:O(1)、O(logn)、O(n)、O(nlogn)、O(n2 )。

猜你喜欢

转载自blog.csdn.net/Luomingkui1109/article/details/88193053