时间复杂度O(f(n))

1、n是算法的输入规模,例如有100W的数据需要排序,那么输入规模n就是100W

2、输入规模n对代码复杂度的影响,主要体现在循环上:
for(i=0;i<n;i*=2){
   sys.out
   sys.out
}
执行次数是2*log(n),我们可以记这个执行次数为T(n),成为算法的相对时间。
注意:我们不会统计究竟算法执行了多长时间,因为这和计算机性能,虚拟机性能,数据长度等有关,我们只统计逻辑上的执行次数

3、如果存在一个f(n),使得当n->无穷大时,有T(n)/f(n)=常数,那么称f(n)是T(n)的同数量级函数,记作T(n)=O(f(n)),称O(f(n))是算法的渐进时间复杂度,简称时间复杂度
把T(n) 统一为一个数量级函数O(f(n)),以至于各种不同的算法,最终可以统一成如O(n),O(n^2),O(log(n))等

4、时间复杂度的统计,如有下面代码片段:

sys.out
for(i=0;i<n;i++){
  sys.out
}
for(i=0;i<n;i*=2){
   sys.out
   sys.out
}
for(i=0;i<n*n;i++){
   sys.out
   sys.out
   sys.out
}
总的执行次数如下:
1 + n + 2*log(n) + 3*n^2 ,当n->无穷时,与n^2是同数量级函数,所以时间复杂度就是O(n^2)
简单总结为:
(1)只保留执行次数的最高阶项
(2)忽略最高阶项的系数

猜你喜欢

转载自blog.csdn.net/ShuaiFanPi/article/details/82079338