数据结构:
时间复杂度:
已知 f(n) 来说,求g(n)
表达式中相乘的常量,可以省略,如
f(n)=100*n2中的100
多项式中数量规模更小 (低次项) 的表达式,如
f(n)=n2+n中的n
f(n)=n+n2中的n2
不同底数的对数,渐进上界可以用一个对数函数logn表示
例如: log2(n)可以替换为 log10(n),因为 log2(n)=log10(n)/log10(2),相乘的常量1/log10(2)可以省略
类似的,对数的常数次幂可省略
如: log(n)=c*log(n)
若有某个辅助函数f(n),使得当n趋近于无穷大时T(n)/f(n)的极限值为不等于零的常数,则称f(n)是T(n)的同数量级函数。记作T(n)=O(f(n))称O(f(n))为算法的渐进时间复杂度(O是数量级的符号),简称时间复杂度
对于求解矩阵相乘问题,算法耗费时间.
T(n)=2n3 + 3n2+ 2n + 1n时,T(n)/n3……=2,这表示n充分大时,T(n)与n3是同阶或同数量级,引入大“O”记号,则T(n)可记作:T(n) = O(n3)
算法中基本语句重复执行的次数是问题规模n的某个函数f(n),算法的时间量度记作: T(n)=O(f(n))
1.算法中重复执行次数和算法的执行时间成正比的语句
2.对算法运行时间的贡献
3.最大执行次数最多
n越大算法的执行时间越长
排序: n为记录数
矩阵:n为矩阵的阶数
多项式:n为多项式的项数
集合: n为元素个数
树: n为树的结点个数
图: n为图的顶点数或边数
分析算法时间复杂度的基本方法
1.找出语句频度最大的那条语句作为基本语句
2.计算基本语句的频度得到问题规模 n的某个函数 f(n)
3.取其数量级用符号“O”表示
时间复杂度T按数量级递增顺序为:
空间复杂度:
算法所需存储空间的度量
记作: S(n)=O(f(n))
其中n为问题的规模(或大小)
将一维数组a中的n个数逆序存放到原数组中
[算法1]S(n)=O(1)
t=a[i];
a[i]=a[n-i-1];
a[n-i-1]=t;
}
[算法2]S(n)=O(n)
b[i]=a[n-i-1];
for(i=0;i<n;i+ +)
a[i]=b[i];