独立于机器的软,硬件系统,一个算法的时间复杂度就是该算法中所有语句的频度之和,用T(n)表示,其中n为为问题的规模。
例如 求两个n 阶矩阵的乘积C=A*B ,其算法如下:
void MatrixMultiply(int A[n][n],int B[n][n],int C[n][n])
{
int i,j,k;
① for(i=0;i<n;i++) //n+1
② for(j=0;j<n;j++) //n(n+1)
{
③ c[i][j]=0; // n*n
④ for(k=0;k<n;k++) //n*n(n+1)
⑤ c[i][j]=C[i][j]+A[i][k]*B[k][j];//n*n*n
}
}
分析:语句① 的循环控制变量i 要测试到i 等于n 成立才会终止,故它的频度是n+1,但是的它的循环体只执行了n次。同理可得②~ ⑤ 的频度分别是n(n+1), n*n,n*n(n+1),n*n*n。所以,该算法中所有语句的频度之和即为时间复杂度:
T(n)=2n*n*n+3n*n+2n+1
算法空间复杂度是指:算法在执行过程中,除代码本身和输入,输出数据所占据的空间
外,临时开辟的存储空间,即辅助空间的数量级。一般来说,它也是问题空间n的函数。
当n趋向无穷大时,空间复杂度S(n) 的数量级(阶)称为算法的渐进空间复杂度,简称为空间复杂度
,记作
S(n) =o(f(n))
算法复杂度是算法时间和空间复杂度的统称。