算法效率:
(1):时间效率:指的是算法所消耗的时间;
(2):空间效率:指的是算法执行过程当中所消耗的存储空间;
算法时间效率的度量
算法时间效率可以用依据该算法编制的程序在计算机上执行所消耗的时间来度量。
事后统计:将算法实现,测算其时间和空间开销。
事前分析:对算法所消耗资源的一种估算方法。
一个算法的运行时间是指一个算法在计算机上运行所消耗的时间大致可以等于计算机执行一种简单的操作(如赋值,比较,移动)所需要的时间与算法中进行的简单操作次数乘积。
算法运行时间=一个简单操作所需要的时间*简单操作次数
算法运行时间=每条语句的执行次数*该语句执行一次所需要的时间
语句频度:语句被执行的次数;
每条语句执行一次所需要的时间,一般是随机器而异。取决于机器的指令性能,速度以及编译的代码质量。是由机器本身软硬件环境决定的,它与算法无关。我们可以假设执行的每条语句所需要的时间均为单位时间。此时对算法的运行时间的讨论就可以转化为讨论该算法中所有语句的执行次数,即频度之和。
例子:两个n*n矩阵相乘的1算法可描述为:
for(int i=1;i<=n;i++)//n+1次 当条件不满足时退出。
for(int j=1;j<=n;j++)//n(n+1)次
{
c[i][j]=0; //n*n次
for(int k=0;k<n;k++)//n*n*(n+1)次
c[i][j]=c[i][j]+a[i][k]*b[k][j];//n*n*n次
}
我们把算法所消耗的时间定义为该算法中每条语句的频度之和,则上诉算法的时间消耗T(n)为:
T(n)=2n^3+3n^2+2n+1;
算法时间复杂度的渐进表示法
为了方便比较不同算法的时间效率,我们仅仅比较它们的数量级
例如:两个不同的算法,时间消耗分别是:
T(n)=10n^2 与 T(n)=5n^3
数量级越大其算法时间复杂度越大;
若有某个辅助函数f(n),使得当n趋近于无穷大时,T(n)/f(n)的极限值为不等于0的常数,则称f(n)是T(n)的同数量级函数。记作T(n)=O(f(n)),称O(f(n))为算法的渐进时间复杂度,简称:时间复杂度。order:数量级。
对于T(n)=2n^3+3n^2+2n+1,当n趋于无穷时,T(n)/n^3趋于2,这表示n充分大时,T(n)与n^3是同阶或者同数量级,T(n)=O(n^3),算法的渐进时间复杂度。
注:主要是找n的最高次数。
n越大,算法执行的时间就越长,
排序:n为记录数
矩阵:n为矩阵的阶数
多项式:n为多项式的项数
集合:n为元素的个数
树:n为树的结点个数
图:n为图的顶点数或者边数