算法是解决问题的方法,通常一个问题会有多种解决方法,就是有多种算法,那么我们如何决定哪个算法更好或者更高效呢?
为了描述一个算法的效率,就用到了这个大O,包括:
O(n) 线性时间操作
O(1) 常数时间操作
O(log n) 对数时间操作
例如在 Redis 的文档中,对每个命令都会给出复杂度描述
明白大O的作用有助于我们提高程序的效率,下面看看他们的具体含义
假设有一个盒子,其中有多个印着数字的卡片(例如 1, 2, 3, 4, … 16)
现在我们被要求找出数字6的卡片,应该怎么做?
一次拿出一个卡片,看数字是否为6,如果符合,那就结束了,否则继续查看下一个卡片,最坏的情况是所有卡片都被检查了一遍
这种方式就是线性操作,记为 O(n)
假设有一个盒子,其中有数字(1, 2, 3, 4, … 16),在盒子外面写上盒子中有16个数字
当有人问我们盒子里有多少个数字的时候,我们看一眼盒子上的标记就可以马上告诉他有16个
这就是常数操作,记为 O(1)
假设有一个盒子,其中有数字(1, 2, 3, 4, … 16),并且这些数字是排好序的
当有人要求找到数字16,以为有序,我们可以把这些数字分成两组,对符合范围的那个组继续拆开,这样,经过4步就可以找到 16
16=2的4次方
在比如有 64 个数字,找到 64 需要 6 步
这就是指数型操作,记为 O(log n)
可以看到,O(1) 最牛,不管数据量有多大,都是一下就完成,O(n) 最惨,数据量大时就有的忙了,O(log n) 虽然与数据量成正比,但所需时间是指数型下降的,很不错
知道了大O的含义,我们也就可以更好的选择算法,例如 redis 中的 keys命令,他的复杂度是 O(n),我们就要慎用了
原文来自:性能与架构
声明:所有来源为“聚合数据”的内容信息,未经本网许可,不得转载!如对内容有异议或投诉,请与我们联系。邮箱:marketing@think-land.com
支持全球约2.4万个城市地区天气查询,如:天气实况、逐日天气预报、24小时历史天气等
支持识别各类商场、超市及药店的购物小票,包括店名、单号、总金额、消费时间、明细商品名称、单价、数量、金额等信息,可用于商品售卖信息统计、购物中心用户积分兑换及企业内部报销等场景
涉农贷款地址识别,支持对私和对公两种方式。输入地址的行政区划越完整,识别准确度越高。
根据给定的手机号、姓名、身份证、人像图片核验是否一致
通过企业关键词查询企业涉讼详情,如裁判文书、开庭公告、执行公告、失信公告、案件流程等等。