1. 时间频度用T(n)表示,表示当一个程序,其中某个变量n,他的值是n时,执行的语句/命令的次数。比如T(n)=3+2n+1。n表示问题规模,可以理解为一个算法,一个函数或程序的输入参数。具体可以理解为程序的循环次数。
时间复杂度用O(f(n))表示,f(n)是一个辅助函数,随着n值增大,与T(n)比值接近常数的函数。比如f(n) = 。
此时,时间复杂度可以用O()表示,表示随着代码中变量n的值逐渐增大时,他需要执行的命令的条数无线接近n2,消耗的时间也无线接近O(
)
2.在计算时间复杂度时,比如T(n)=3+2n+1 ,随着n的值增大,公式中的常数项(1),低次阶2n,以及高次阶3
的系数3都可以忽略,所以该算法的时间复杂度时O(
)。
3. 常见的算法复杂度有
常数阶O(1),对数阶O(logn),线性阶O(n),对数线性阶nO(logn),平方阶O(),立方阶,
阶等。(这里的logn是以2为底,n的对数,底数可以根据实际情况可能是2,3,4...)。以上算法时间复杂度从低到高排序。
4. 算法复杂度举例
常数阶:没有循环的程序,即使有几万行代码,那么时间复杂度也是O(1)
对数阶:
int i = 1;
while(i<n){
i = i*2;
}
线性阶:
for(int i=1;i<n;i++){
...
...
}
线性对数阶:
for(int i=0;i<n;i++){
int i = 1;
while(i<n){
i = i*2;
}
}
2次平方阶:就是两个for循环,3次平方阶就是3个for循环。
for(int i=0;i<n;i++){
for(int i=0;i<n;i++){
...
...
}
}
5. 总结:
某个程序或者函数(输入变量或者参数是n)时间复杂度跟循环次数有关,循环一次,是O(),即O(1),循环n次,就是O(n),即线性阶。如果循环
,就是O(
),平方阶。