时间复杂度
通俗的来说是看程序编译时间,每出一次结果就算是一次时间复杂度,下面引用经典例题进行讲解
(主要是for循环内语句)个人觉得绪论方面不会考的太难,会基础即可。
例题1
for(i=0; i<n; i++)
for(j=0 j<m; j++)
a[i][j]=0;
先看输出语句:a[i][j]=0;则时间复杂度为i与j的乘积,第一个for语句i要执行n次即i的时间复杂度,第二个执行m次即j的时间复杂度。所以本题时间复杂度为O(nm)。
例题2
s=0;
for(i=0; i<n; i++)
for(j=0; j<n; j++)
s+=B[i][j];
sum=s;
结果为n²,思路与上一题一样。
算法的空间复杂度的计算
记作:S(n)=O(f(n)),一般出现在数组和指针中,其他的空间复杂度常为1,n,n²。本教材上未涉及指针运算。
例题1
for(i=0; i<n/2;i++)
{
t=a[i];
a[i]=a[n-i-1];
a[n-i-1]=t;
}
本题n只作为一个参数参与参数的传递,并没有实际参与运算,所以空间复杂度为:O(0)
例题2
for(i=0;i<n;i++)
b[i]=a[n-i-1];
for(i=0;i<n;i++)
a[i]=b[i];
借助了一个大小为n的数组b,则空间复杂度为0(n)。