算法学习:时间复杂度的总结

最近在上那个算法设计课真是搞得我一头雾水,现在先从基础的时间复杂度看起,看了一篇博客还不错,总结一下。

在程序设计语言里,每执行一条语句就要花费一点时间,为了方便讨论,每条语句花费的时间称为一个时间单元,把下面给出的代码为例,i=0执行一次,i++执行n次,输出语句也执行n次,那么一共所需要的时间就为2n+1次,然后可以得出T(n)=2n+1。

for(int i=0;i<=n;i++)
{
	System.out.println("hello");
	}

通常,对T(n)的表达式,我们会进行简化但不会丢失其特性,因为当n无限大时,他的常数项就不会对函数造成影响。简化的方式是保留函数的最高项,其他的忽略,那么上面的T(n)就为n,n就为时间复杂度,保留最高项之后留下的就为时间复杂度,能代表算法执行的整体趋势,记为O(n)。
忽略的顺序如下:
O(1)2)3)n)n)
所以时间复杂度的计算分两步:
1.计算T(n),程序运行的时间
2.简化T(n),保留最高项

O(n)=logn,这个是对数级别的时间复杂度,他的函数走势是随着n增大而逐渐减小,趋势缓慢比线性函数比如O(n)要好,我记得当时学习对数的复杂度的时候,分析不清楚,下面来分析一下这个函数。

int i=1;
while(i<n){
  i=i*2;
}

上面的时间复杂度就是对数的时间复杂度,计算的话可以这样想,循环一次,i就乘2,就想要多少次才能跳出这个循环,那么设为x次,2^x<=n,那么x 则为logn。

–侵权删除

你可能感兴趣的:(算法学习:时间复杂度的总结)