关于时间复杂度

2018-12-05  本文已影响51人  Mr_Doer

一、定义

一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数,用T(n)表示,若有某个辅助函数f(n),使得当n趋近于无穷大时,T(n)/f(n)的极限值为不等于零的常数,则称f(n)是T(n)的同数量级函数。记作T(n)=O(f(n)),称O(f(n))为算法的渐进时间复杂度(O是数量级的符号 ),简称时间复杂度。

1) 时间频度

2) 时间复杂度

注意,时间频度与时间复杂度是不同的,时间频度不同但时间复杂度可能相同。
如:T(n)=n2+3n+4与T(n)=4n2+2n+1它们的频度不同,但时间复杂度相同,都为O(n2)。

常见的时间复杂度有:

常数阶O(1)
<对数阶O(log2n)
<线性阶O(n)
<线性对数阶O(nlog2n)
<平方阶O(n^2)
<方阶O(n3)
<指数阶O(2^n)

3) 最坏时间复杂度和平均时间复杂度

-- 最坏时间复杂度

通常,除非特别指定,我们提到的运行时间都是最坏情况的运行时间

为什么是最坏时间复杂度:

-- 平均时间复杂度

平均时间复杂度也是从概率的角度看,更能反映大多数情况下算法的表现。当然,实际中不可能将所有可能的输入都运行一遍,因此平均情况通常指的是一种数学期望值,而计算数学期望值则需要对输入的分布情况进行假设。平均运行时间很难通过分析得到,一般都是通过运行一定数量的实验数据后估算出来的。

最后:

1、时间复杂度取决于执行次数最多的语句,如当有若干个循环语句时,算法的时间复杂度是由嵌套层数最多的循环语句中最内层语句的频度f(n)决定的

2、如果算法的执行时间不随着问题规模n的增加而增长,即使算法中有上千条语句,其执行时间也不过是一个较大的常数。此类算法的时间复杂度是O(1)

3、算法的时间复杂度不仅仅依赖于问题的规模,还与输入实例的初始状态有关

上一篇下一篇

猜你喜欢

热点阅读