java算法----算法的时间复杂度

独自空忆成欢 提交于 2020-02-08 04:52:20

一. 度量一个程序(算法)执行时间的两种方法

1.事后统计的方法

   这种方法可行,但有两个问题: 一是想要对设计的算法的运行性能进行评测,需要实际运行改程序; 二十所得时间的统计量依赖于计算机硬件, 软件等环境因素, 这种方式, 要在同一台计算机的相同状态下运行,才能比较哪个算法速度更快.

2.事前估算的方法

通过分析算法的时间复杂度来判断哪个算法更占优

二. 从时间频度到时间复杂度

1.时间频度
一个算法执行所耗费的时间,从理论上是不能算出来的,必须上机运行测试才能知道。但我们不可能也没有必要对每个算法都上机测试,只需知道哪个算法花费的时间多,哪个算法花费的时间少就可以了。并且一个算法花费的时间与算法中语句的执行次数成正比例,哪个算法中语句执行次数多,它花费时间就多。一个算法中的语句执行次数称为语句频度或时间频度。记为T(n),n表示语句的执行次数。

时间频度案例说明:

 2.时间复杂度
前面提到的时间频度T(n)中,n称为问题的规模,当n不断变化时,时间频度T(n)也会不断变化。但有时我们想知道它变化时呈现什么规律,为此我们引入时间复杂度的概念。一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数,用T(n)表示,若有某个辅助函数f(n),使得当n趋近于无穷大时,T(n)/f(n)的极限值为不等于零的常数,则称f(n)是T(n)的同数量级函数,记作T(n)=O(f(n)),它称为算法的渐进时间复杂度,简称时间复杂度

举例说明,寻找T(n)的同量级函数可以忽略常数项

横坐标为n,纵坐标为T(n), 执行次数n无限大时,不同常数项的Tn无限接近,说明f(n) = n 是T(n)的同量级函数,因此这些算法的时间复杂度同为O(n) .

举例说明,寻找T(n)的同量级函数可以忽略低次项

横坐标为n,纵坐标为T(n), 执行次数n无限大时,不同低次项及常数项的Tn最终将会无限接近,说明f(n) = n^2 是T(n)的同量级函数,因此这些算法的时间复杂度同为O(n^2) .

3.计算时间复杂度的方法

4. 平均时间复杂度和最坏时间复杂度

 

三. 常见的时间复杂度

1.常见的时间复杂度

常数阶 O(1)
对数阶 O(logn)
线性阶 O(n)
线性对数阶 O(nlogn)
平方阶 O(n²)
立方阶 O(n³)
k次方阶(k>3) O(n^k)    
指数阶 O(2ⁿ)
阶乘阶 O(n!)

 2.常见时间复杂度排序

说明:

(1)常见的时间复杂度由小到大依次为:  O(1) < O(logn) < O(n) < O(nlogn) <  O(n²) < O(n³) < O(n^k) < O(2ⁿ)

(2) 从图中可以看出,应尽量使用指数阶的算法

 

3.常见时间复杂度举例

(1)常数阶O(1)

(2) 对数阶 O(log2 n)

(3) 线性阶  O(n)

(4) 线性对数阶 O(nlogn)

 (5)平方阶 O(n²)

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!