您的位置:首页 > 其它

算法(1)时间复杂度 和 空间复杂度

2016-08-11 08:34 204 查看
•算法时间复杂度的定义:在进行算法分析时,语句总的执行次数T(n)是关于问题规模n的函数,进而分析T(n)随n的变化情况并确定T(n)的数量级。算法的时间复杂度,也就是算法的时间量度,记作:T(n)=O(f(n))。它表示随问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同,称作算法的渐近时间复杂度,简称为时间复杂度。其中f(n)是问题规模n的某个函数。
•好长好长,没想到定义这个概念的老家伙比小甲鱼还罗嗦。(关键需要知道执行次数==时间)

•那么如何分析一个算法的时间复杂度呢?即如何推导大O阶呢?我们给大家整理了以下攻略:
–用常数1取代运行时间中的所有加法常数。
–在修改后的运行次数函数中,只保留最高阶项。
–如果最高阶项存在且不是1,则去除与这个项相乘的常数。
–得到的最后结果就是大O阶。

对数阶

inti = 1, n = 100;

while(i < n )

{

i= i*2;

}

•由于每次i*2之后,就举例n更近一步,假设有x个2相乘后大于或等于n,则会退出循环。
•于是由2^x = n得到x = log(2)n,所以这个循环的时间复杂度为O(logn)。
•其实理解大O推导不算难,难的是对数列的一些相关运算,这更多的是考察你的数学知识和能力。

常见的时间复杂度

例子

时间复杂度

装逼术语

5201314

O(1)

常数阶

3n+4

O(n)

线性阶

3n^2+4n+5

O(n^2)

平方阶

3log(2)n+4

O(logn)

对数阶

2n+3nlog(2)n+14

O(nlogn)

nlogn阶

n^3+2n^2+4n+6

O(n^3)

立方阶

2^n

O(2^n)

指数阶

•常用的时间复杂度所耗费的时间从小到大依次是:O(1) < O(logn)< (n) < O(nlogn) < O(n^2)
< O(n^3) < O(2^n) < O(n!) < O(n^n)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐