算法性能评估-时间复杂度

来源:互联网 发布:php源码分析弱类型 编辑:程序博客网 时间:2024/06/10 03:12

时间复杂度是用来评估算法性能的一个重要指标,有以下对应的关系。

1 < log(n) < n < nlog(n) < n^2 < n^3 < 2^n < n! < n^n

(1) 1 表示常数。

    程序执行的最大次数是可以估计到的,也就是说是一个常数。

(2) log(n)

    如果一个程序的运行时间是对数级的,则随着N的增大程序会渐渐慢下来,如果一个程序将一个大的问题分解成一系列更小的问题,每一步都将问题的规模缩减成几分之一,一般就会出现这样的运行时间函数。在我们所关心的范围内,可以认为运行时间小于一个大的常数。对数的基数会影响这个常数,但改变不会太大:当N=1000时,如果基数是10,logN等于3;如果基数是2,logN约等于10.当N=1 00 000,logN只是前值的两倍。当N时原来的两倍,logN只增长了一个常数因子:仅当从N增长到N平方时,logN才会增长到原来的两倍。

(3) n

    线性时间复杂度,常用的一个循环,就是这样的复杂度。

(4) nlog(n)

    如果某个算法将问题分解成更小的子问题,独立地解决各个子问题,最后将结果综合起来,运行时间一般就是NlogN。当N=1 000 000时,NlogN大约是20 000 00020 000 000。当N增长到原来的两倍,运行时间超过原来的两倍,但超过不是太多。

(5) n^2

    常见的双层循环

(6) n^3

    常见的三层循环

(7) 2^n

    指数级的时间复杂度。

在排序算法中经常会比较n^2和nlog(n)的时间复杂度。在稍后的排序算法中,再详细分析。

0 0
原创粉丝点击