专注于 JetBrains IDEA 全家桶,永久激活,教程
持续更新 PyCharm,IDEA,WebStorm,PhpStorm,DataGrip,RubyMine,CLion,AppCode 永久激活教程

算法中时间复杂度大O是什么意思?O(n),O(1),O(log n) 时间复杂度

简介

算法是解决问题的方法,通常一个问题会有多种解决方法,就是有多种算法,那么我们如何决定哪个算法更好或者更高效呢?

为了描述一个算法的效率,就用到了这个大O,包括:

1、 O(n) 线性时间操作
2、 O(1) 常数时间操作
3、 O(log n) 对数时间操作

例如在 Redis 的文档中,对每个命令都会给出复杂度描述

57_1.png

57_2.png

明白大O的作用有助于我们提高程序的效率,下面看看他们的具体含义

O(n) 线性时间操作

假设有一个盒子,其中有多个印着数字的卡片(例如 1, 2, 3, 4, … 16)

现在我们被要求找出数字6的卡片,应该怎么做?

一次拿出一个卡片,看数字是否为6,如果符合,那就结束了,否则继续查看下一个卡片,最坏的情况是所有卡片都被检查了一遍

这种方式就是线性操作,记为 O(n)

O(1) 常数时间操作

假设有一个盒子,其中有数字(1, 2, 3, 4, … 16),在盒子外面写上盒子中有16个数字

当有人问我们盒子里有多少个数字的时候,我们看一眼盒子上的标记就可以马上告诉他有16个

这就是常数操作,记为 O(1)

O(log n) 对数时间操作

假设有一个盒子,其中有数字(1, 2, 3, 4, … 16),并且这些数字是排好序的

当有人要求找到数字16,以为有序,我们可以把这些数字分成两组,对符合范围的那个组继续拆开,这样,经过4步就可以找到 16

57_3.png

16=2的4次方

57_4.png

在比如有 64 个数字,找到 64 需要 6 步

57_5.png

这就是指数型操作,记为 O(log n)

小结

可以看到,O(1) 最牛,不管数据量有多大,都是一下就完成,O(n) 最惨,数据量大时就有的忙了,O(log n) 虽然与数据量成正比,但所需时间是指数型下降的,很不错

知道了大O的含义,我们也就可以更好的选择算法,例如 redis 中的 keys命令,他的复杂度是 O(n),我们就要慎用了

文章永久链接:https://tech.souyunku.com/12242

未经允许不得转载:搜云库技术团队 » 算法中时间复杂度大O是什么意思?O(n),O(1),O(log n) 时间复杂度

JetBrains 全家桶,激活、破解、教程

提供 JetBrains 全家桶激活码、注册码、破解补丁下载及详细激活教程,支持 IntelliJ IDEA、PyCharm、WebStorm 等工具的永久激活。无论是破解教程,还是最新激活码,均可免费获得,帮助开发者解决常见激活问题,确保轻松破解并快速使用 JetBrains 软件。获取免费的破解补丁和激活码,快速解决激活难题,全面覆盖 2024/2025 版本!

联系我们联系我们