用5年算法经验:来讲透什么是时间复杂度和空间复杂度?

养成阅读好习惯,从关注开始!

文末附相关资料
在这里插入图片描述
前言
所谓算法,其实就是我们用来操作数据、解决程序问题的一组方法。针对同一个问题,我们可以采用不同的算法,然后实现相同的结果。但是针对不同的算法,对于时间和资源的消耗却有不同的差别。而为了分析不同算法的效率,我们常常从 时间 和 空间 两个方面来对比,然后从中挑出最适合我们的解决方案。

本文主要从时间复杂度和空间复杂度的定义说起,然后介绍常见的时间复杂度和空间复杂度,最后则是对常见排序算法进行了总结。

时间复杂度

定义

若存在函数 f(n)f(n)f(n),使得当 nnn 趋向无穷大时,T(n)/f(n)T(n) / f(n)T(n)/f(n) 的极限值为不等于 0 的常数,则称 f(n)f(n)f(n) 是 T(n)T(n)T(n) 的同数量级函数,记作 T(n)=O(f(n))T(n)=O(f(n))T(n)=O(f(n)),称 O(f(n))O(f(n))O(f(n)) 为算法的 渐进时间复杂度,简称 时间复杂度,用大 O 来表示,称为 大 O 表示法;

推导时间复杂度的原则

  1. 若运行时间是常数量级,则用常数 1 表示;
  2. 只保留时间函数中最高阶项,如 O(n2+4n)O(n^2 + 4n)O(n2+4n),保留最高阶项后,成为
    O(n2)O(n^2)O(n2);
  3. 若最高阶项存在,则省去最高阶项前的系数,如 O(4n2)O(4n^2)O(4n2),省去最高阶项的系数后,成为
    O(n2)O(n^2)O(n2);欢迎大家进Java学习交流君样:1142951706 一起交流 一起吹水~

分析时间复杂度的方法

总结起来,对于如何分析一段代码的时间复杂度,主要有如下 3 个实用方法:

  1. 只关注循环执行次数最多的一行代码;
  2. 加法原则:总复杂度等于量度最大的那段代码的复杂度;
  3. 乘法原则:嵌套代码的复杂度等于嵌套内外代码复杂度的乘积;

常见的时间复杂度曲线
在这里插入图片描述
常见时间复杂度

O(1)O(1)O(1)

void sayHello(String name){
   
    System.out.prinln("Hello, " + String);
    System.out.prinln("欢迎关注我的公众号:【Java大蜗牛】");
}

O(logn)

如下列二分查找代码中,通过 while 循环,能够成倍的缩减搜索范围,假设需要 x 次才能跳出循环,则有 num * 2 * 2 * … = n ,其中 num 是常数,有 n 个 2 相乘,则有 num∗2x=nnum * 2 ^x = nnum∗2x=n,从而推出 x=log2(n/num)x = log_2(n/num)x=log2(n/num) ,因此时间复杂度用大 O 表示法表示为 O(logn)。O(log n)。O(logn)。


                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值