一、算法的概念

  算法中基本操作的执行次数一般是与问题的规模有关的。对于节点个数为n的数据处理问题,用T(n)表示算法基本操作的执行次数。为评价算法的时间复杂度与空间复杂度,我们引入记号为“O”的数学符号。设T(n)和f(n)是定义在正整数集合上的两个函数,如果存在正常数C和No,使得当n=No时,都有0=T(n)=C*f(n),则记T(n)=0(f(n))。在评价算法的时间复杂度时,不考虑两个算法执行次数之间的细小区别,而只关心算法的本质区别。

  常见算法时间复杂度排序为:

  **Ο(1)Ο(log2n)Ο(n)Ο(nlog2n)Ο(n2)Ο(n3)…Ο(2n)Ο(n!)

  

简单程序的时间复杂度分析_第1张图片


  算法时间复杂度的最小、最大和平均值:

  算法在最好的情况下的时间复杂度是指算法计算量的最小值。

  算法在最坏的情况下的时间复杂度是指算法计算量的最大值。

  算法在平均情况下的时间复杂度是指算法在所可能的情况下的计算量经过加权计算出的平均值。

  csdn找到的算法的描述

  二、常用程序的简单的时间复杂度分析

  **首先我们将每次执行一行程序的时间复杂度记为O(1)。

  时间复杂度分析的基本策略是:从内向外分析,从最深层开始分析。如果遇到函数调用,要深入函数进行分析。

  1、对于一个循环,假设循环体的时间复杂度为 O(n),循环次数为 m,则这个

  循环的时间复杂度为 O(n×m)。

简单程序的时间复杂度分析_第2张图片  所以上述程序的时间复杂度为O(n×1),为O(n)。由此延伸,多重循环的时间复杂度可以内外层循环相乘获得

简单程序的时间复杂度分析_第3张图片

  所以上述程序的时间复杂度为O(n × n × 1)=O(n^2)。

  2.对于顺序执行的程序语句,时间复杂度可用叠加计算

简单程序的时间复杂度分析_第4张图片

  所以时间复杂度的计算为O(n^2)+O(n),由于只考虑量级的关系,所以该代码块的时间复杂度为O(n^2)。

  3.对于条件判断语句,总的时间复杂度等于其中 时间复杂度最大的路径 的时间复杂度。

简单程序的时间复杂度分析_第5张图片

  此时的时间复杂度为O(n^2)。

  练习1

简单程序的时间复杂度分析_第6张图片

  需要满足i*2n,所以循环次数为log(2)(n),所以时间复杂度为o(log(2)(n))即为o(log p= n).=

  练习

简单程序的时间复杂度分析_第7张图片

  显然运行次数,T(0) = T(1) = 1,同时 T(n) = T(n - 1) + T(n - 2) + 1,这里的 1 是其中的加法算一次执行。

  显然 T(n) = T(n - 1) + T(n - 2) 是一个斐波那契数列,通过归纳证明法可以证明,当 n = 1 时 T(n) (5/3)^n,同时当 n 4 时 T(n) = (3/2)^n。

  所以该方法的时间复杂度可以表示为 O((5/3)^n),简化后为 O(2^n)。