前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >时间复杂度深度解析

时间复杂度深度解析

原创
作者头像
用户4196462
发布2022-02-06 00:04:20
2000
发布2022-02-06 00:04:20
举报

对于学习算法的同志们,少不了对于时间复杂度的学习,在此对时间复杂度的学习进行记录,如有纰漏,尽请评论。

从字面解析,就是一个算法运行的时间,很多小伙伴都想到了把算法程序运行一遍,那么消耗的时间就自然而然的知道了,这种方式是可以的,但是有很多的弊端,很容易受到运行环境的影响,性能的高低相差很大,对使用的数据规模也有关系。所以还是不能完整的去运行它。

这样一种通用的方式就诞生了,「 大O符号表示法 」,在 大O符号表示法中,时间复杂度的公式是: T(n) = O( f(n) ),其中f(n) 表示每行代码执行次数之和,而 O 表示正比例关系,这个公式的全称是:算法的渐进时间复杂度。 这种方式并不是用于来真实代表算法的执行时间的,表示执行时间增长的变化趋势的。

1. 常数阶O(1)

int i = 1; int j = 2; ++i; j++; int m = i + j;

2.线性阶O(n)

for(i=1; i<=n; ++i)

{

j = i;

j++;

}

for循环里面的代码会执行n遍,因此它消耗的时间是随着n的变化而变化的,这类代码都可以用O(n)来表示它的时间复杂度。

3. 对数阶O(logN)

int i = 1;

while(i<n)

{

i = i * 2;

}

在while循环里面,每次都将 i 乘以 2,乘完之后,i 距离 n 就越来越近了。假设循环x次之后,i 就大于 2 了,此时这个循环就退出了,也就是说 2 的 x 次方等于 n,那么 x = log2^n也就是说当循环 log2^n 次以后,这个代码就结束了。因此这个代码的时间复杂度为:O(logn)

4. 线性对数阶O(nlogN)

for(m=1; m<n; m++)

{

i = 1;

while(i<n)

{

i = i * 2;

}

}

线性对数阶O(nlogN) 其实非常容易理解,将时间复杂度为O(logn)的代码循环N遍的话,那么它的时间复杂度就是 n * O(logN),也就是了O(nlogN)。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档