一分钟理解时间复杂度——零基础必看

引言:最好结合八大排序算法理解时间复杂度,八大排序算法:八大排序算法,算法入门必看。icon-default.png?t=M276https://mp.csdn.net/mp_blog/creation/editor/124141566

目录:

一、究竟什么是时间复杂度

二、什么是大O

        ①基本概念

        ②大O表示法        

        ③简易示例

        ④时间复杂度的计算


一、究竟什么是时间复杂度

时间复杂度就是用来方便开发者估算出程序的运行时间。

假设算法的问题规模为n,那么操作单元数量便用函数f(n)来表示。

随着数据规模n的增大,算法执行时间的增长率和f(n)的增长率相同,这称作为算法的渐近时间复杂度,简称时间复杂度,记为 O(f(n))。

二、什么是大O

①基本概念

        这里就要说一下这个大O,什么是大O呢,很多同学说时间复杂度的时候都知道O(n),O(n^2),O(nlogn)其中,大O用来表示上界的,当用它作为算法的最坏情况运行时间的上界,就是对任意数据输入的运行时间的上界。比如排序算法中数据本来有序的情况下时间复杂度是O(n),也就对于所有输入情况来说,最坏是O(n^2) 的时间复杂度,我们这里说的O 代表的就是一般情况,不是严格的上界。

②大O表示法

上面的时间复杂度的表示还是较复杂,我们一般都使用大O表示法来简化表示时间复杂度。

1、复杂度为常数,如23,9999,等等 都表示为O(1)

2、复杂度包含n时,省略系数与常数项,只取n的最高阶项

​ 如:2n+45 为 O(n) ; 4n^3+6n^2+n 为O(n^3)

3、复杂度为对数时:如log5(n)、log2(n) 等等 都表示为 O(logn)

4、省略低阶,只取高阶 (即取最大的)

​ 如:logn+nlogn 表示为O(nlogn)

复杂度的大小:

O(1) < O(logn) < O(n) < O(nlogn) < O(n^2) < O(n^3) < O(2^n) < O(n!) < O(n^n)

复杂度越小,则说明你的代码越好。

③简易示例

        以八大排序里的插入排序和希尔排序为例,时间复杂度=每一轮的O*所需要的轮数,如果插入排序的待排序数组是一个有序的数组,那么时间复杂度=O(1)*n轮,即O(n),而如果数组不是有序的,那么,每次最多所需O(n),时间复杂度=O(n)*n轮,即O(n^2),所以对于平均来说每次为O(n/2)*n轮,即O((n^2)/2)也就是O(n^2)。

        而希尔排序再优化了插入排序中对于后期排序中出现较小的数字需要向前比较移动次数过多的情况,提出了循环减半,即每次时间复杂度为O(logn),先将数据分组,然后内部使用插入排序,所以希尔排序的时间复杂度=O(logn)*n轮,即O(nlogn),具体方法看博客最上面的八大排序算法的文章。

④时间复杂度的计算

        通过寻找算法中的嵌套结构,找到每一层的循环,找到执行次数最多的基本语句进行计算,主要依据以下两种原则:

        1.加法原则:即,T(n)=O(f(n))+O(g(n))=O(max(fn,gn))

        2.乘法原则:即,T(n)=O(f(n))*O(g(n))=O(f(n)*g(n))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Liuyc-Code boy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值