1.2.1算法的基本概念
算法是对特定问题求解步骤的一种描述,它是指令的有限序列,其中每条指令表示一个或多个操作。
算法具有以下5个重要特性:
”好“算法应该考虑的目标
1.2.2 算法效率的度量
算法效率的度量时通过时间复杂度和空间复杂度来描述的
1.时间复杂度
在进行算法分析时,语句总的执行次数T(n)是关于问题规模n的函数,进而分析T(n随n的变化情况并确定T(n)的数量级。算法的时间复杂度,也就是算法的时间量度,记作:T(n)=O(f(n))。它表示随问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同,称作算法的渐近时间复杂度,简称为时间复杂度。其中f(n)是问题规模n的某个函数。
这样用大写O( )来体现算法时间复杂度的记法,我们称之为大O记法。 一般情况下,随着n的增大,T(n)增长最慢的算法为最优算法。
T(n)=O(f(n))
常用时间复杂度:O(1) < O(logn) < O(n) < O(nlogn) < O(n2) < O(n3) < O(2n) < O(n!) < O(nn)
取f(n)中随n增长最快的项,将其系数置为1作为时间复杂度的度量:
f(n)=an^3 + bn^2 + cn的时间复杂度为O(n^3)
O的含义时T(n)的数量级。
2.空间复杂度
算法的空间复杂度S(n)定义为该算法所耗费的存储空间,它是问题规模n的函数:
S(n) = O(g(n))
一个程序在执行时除需要存储空间来存放本身所用的指令、常数、变量、和输入数据外,还需要对一些数据进行操作的工作单元和存储一些为实现计算所需信息的辅助空间。若输入数据所占空间只取决于问题本身,和算法无关,则只需分析除输入和程序之外的额外空间。
算法原地工作是指算法所需的辅助空间为常量,即O(1)