复杂度分析(算法训练营开课准备笔记)

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

如何分析、统计算法的执行效率和资源消耗?

为什么需要复杂度分析?

1. 测试结果非常依赖测试环境

测试环境中硬件的不同会对测试结果有很大的影响。

2. 测试结果受数据规模的影响很大

后面我们会讲排序算法,我们先拿它举个例子。对同一个排序算法,待排序数据的有序度不一样,排序的执行时间就会有很大的差别。极端情况下,如果数据已经是有序的,那排序算法不需要做任何操作,执行时间就会非常短。

大 O 复杂度表示法

通过这两段代码执行时间的推导过程,我们可以得到一个非常重要的规律,那就是,所有代码的执行时间 T(n) 与每行代码的执行次数 n成正比。
我们可以把这个规律总结成一个公式。注意,大 O 就要登场了!
复杂度分析(算法训练营开课准备笔记)_第1张图片
所以,第一个例子中的 T(n) = O(2n+2),第二个例子中的 T(n) = O(2n2+2n+3)。这就是
大 O 时间复杂度表示法。大 O 时间复杂度实际上并不具体表示代码真正的执行时间,而是
表示代码执行时间随数据规模增长的变化趋势,所以,也叫作渐进时间复杂度
(asymptotic time complexity),简称时间复杂度。

时间复杂度分析

  1. 只关注循环执行次数最多的一段代码
  2. 加法法则:总复杂度等于量级最大的那段代码的复杂
  3. 乘法法则:嵌套代码的复杂度等于嵌套内外代码复杂度的乘积

几种常见时间复杂度实例分析
复杂度分析(算法训练营开课准备笔记)_第2张图片
空间复杂度分析
时间复杂度的全称是渐进时间复杂度,表示算法的执行时间与数据规模之间的增长关系。类比一下,空间复杂度全称就是渐进空间复杂度(asymptotic space
complexity),表示算法的存储空间与数据规模之间的增长关系。

总结:

复杂度分析并不难,关键在于多练。 之后讲后面的内容时,我还会带你详细地分析每一种数据结构和算法的时间、空间复杂度。只要跟着我的思路学习、练习,你很快就能和我一样,每次看到代码的时候,简单的一眼就能看出其复杂度,难的稍微分析一下就能得出答案。

你可能感兴趣的:(#,数据结构与算法)