一、算法:
1、算法定义:算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作。
2、算法具有五个基本特性:输入、输出、有穷性、确定性、可行性。
a.算法具有零个或多个输入,至少有一个或多个输出
b.有穷性:算法在执行有限的步骤之后会自动结束,而不会出现无限循环,并且每一个步骤是在可接受的时间内完成
c.确定性:算法的每一步骤都具有确定的含义,不会出现二义性,也就是说相同的输入只能有唯一的输出结果
d.可行性:算法的每一步都必须是可行的,也就是每一步都可以转换为程序上机执行,并且得到正确的结果
二、函数的渐近增长
1、渐近增长的定义:对于一个函数f(n),输入规模n在没有限制的情况下,只要n超过了一个数值N,这个函数就总会大于另一个函数。那么就称这个函数f(n)是渐近增长的。
那如果我们给定两个函数f(n),g(n),如果存在一个整数N,使得对于所有的n>N,f(n)总是比g(n)大,则称f(n)的增长渐近快于g(n)
2、对于函数的增长,我们可以忽略加法常数,忽略项数,注意指数,最高次项的指数越大,函数的增长也就越快
三、算法时间复杂度
1、f(n):函数
T(n):算法执行时间(算法语句执行次数)
时间复杂度:T(n) = O(f(n))
2、常数阶O(1):单纯的分支结构(即不包含在循环中),时间复杂度都为O(1)
线性阶O(n): 一个循环n次的循环结构,时间复杂度为O(n)
对数阶O(logn):一个循环log₂n次的循环结构,时间复杂度为O(logn)。(不一定非得是2的对数,2代表常数)
平方阶O(n²) 立方阶O(n³) 指数阶O(2^n) nlogn阶O( nlogn)
O(1)<O(logn)<O(n)<O( nlogn)<O(n²) <O(n³)<O(2^n) <O(2!)<O(nⁿ)
3、学会计算时间复杂度
四、算法空间复杂度
1、f(n):关于n所存储空间的函数
算法空间复杂度:S(n) = O(f(n))
2、若算法执行时所需的辅助空间相对于输入数据量而言是个常数,则称此算法为原地工作,空间复杂度为O(1)