一.小结导图
二.时间复杂度和空间复杂度
-
时间复杂度
一个语句的频度是指该语句在算法中被重复执行的次数。算法中所有语句的频度之和记作T(n),它是该算法问题规模n的函数,时间复杂度主要分析T(n)的数量级(取f(n)中随n增长最快的项将其系数置为1作为时间复杂度的度量)。算法中的基本运算(最深层循环内的语句)的频度与T(n)同数量级,所以通常采用算法中基本运算的频度f(n)来分析算法的时间复杂度。因此,算法的时间复杂度记为:
T ( n ) = O ( f ( n ) ) T(n) = O(f(n)) T(n)=O(f(n)) O的含义是T(n)的数量级,其严格的数学定义是:若T(n)和f(n)是定义在整数集合上的两个函数,则存在正常数C和n0,使得n>=n0时,都满足0<=T(n)<=C*f(n)。
算法的时间复杂度不仅依赖于问题的规模n,也取决于待输入数据的性质。
加法原则:
T ( n ) = T 1 ( n ) + T 2 ( n ) = O ( f ( n ) ) + O ( g ( n ) ) = O ( m a x ( f ( n ) , g ( n ) ) ) T(n) = T1(n)+T2(n) = O(f(n))+O(g(n)) = O(max(f(n), g(n))) T(n)=T1(n)+T2(n)=O(f(n))+O(g(n))=O(max(f(n),g(n)))
乘法原则:
T ( n ) = T 1 ( n ) × T 2 ( n ) = O ( f ( n ) ) × O ( g ( n ) ) = O ( f ( n ) × g ( n ) ) T(n) = T1(n)\times T2(n) = O(f(n))\times O(g(n)) = O(f(n)\times g(n)) T(n)=T1(n)×T2(n)=O(f(n))×O(g(n))=O(f(n)×g(n))
常见的渐近时间复杂度有 O(1) < O(log2n)<O(n)<O(n2)<O(n3)<O(2n)<O(n!)<O(nn)
-
空间复杂度
算法的空间复杂度S(n)定义为该算法所耗费的存储空间,它是问题规模n的函数,记作S(n) = O(g(n))。
一个上机程序除了需要存储空间来存放本身所用指令、常数、变量和输入数据之外,也需要一些对数据进行操作的工作单元和存储一些为实现计算所需信息的辅助空间,若输入数据所占空间只取决于问题的本身,和算法无关,则只需分析除输入和程序之外 的额外空间
算法原地工作是指算法所需辅助空间是常量,即O(1)。