什么是算法?
用来处理运算和逻辑的问题的代码块
运行时间的长短和占用内存空间的大小是衡量算法好坏的重要标准
运行时间长短用时间复杂度来衡量
运行占用内存空间的大小用空间复杂度衡量
时间复杂度与空间复杂度
1.时间复杂度
即渐进时间复杂度,用O表示
时间复杂度就是程序的相对执行时间函数T(n)简化为一个函数方程表示,如T(n)=O(n)、T(n)= O(nlogn)
推导时间复杂度的原则:
*1)运行时间如果是常数,如:T(n)= 4,则用O(1)表示
*2)只用时间函数中的最高阶表示T(n)= n2+n3,则用O(n3)表示
*3)如最高阶存在,省略最高阶前系数T(n )=2logn,则用O(logn)表示
当n足够大时,时间复杂度越小越好
常见时间复杂度由低到高顺序:O(1)、O(nlogn)、O(n)、O(nlogn)、O(n2)
2.空间复杂度
度量一个算法在运行中临时暂用存储空间的大小,用O表示
常见空间复杂度:
1)常量空间
存储空间固定,与输入n无关,空间复杂度为O(1)
2)线性空间
算法分配空间是集合,集合大小和输入规模n成正比
空间复杂度为O(n)
3)算法分配空间是一个二维数组集合,并且集合的长宽与n成正比
空间复杂度为O(n2)
4)递归空间
递归一个特殊的场景,计算机会为递归专门分配内存,存储方法调用栈,有入栈,有出栈,存粹的递归操作空间复杂度是线性的,递归深度为n,空间复杂度为O(n)
常见空间复杂度由低到高顺序:O(1)、O(n)、O(n2)
时间与空间的取舍
大多数时候,我们认为时间复杂度更为重要,即便多分配一些内存空间,也要提高运行速度。