算法引言之大O记法---时间复杂度分析

算法引言之大O记法—时间复杂度分析

前言

来填一填坑

问题分析

对于代码,企业肯定需要更高质量。那么,以什么标准衡量一段代码的质量呢?显而易见,执行时间。没有客户希望自己的程序始终处于转圈状态,都想要一个反应速度很快的软件。问题随之而来,怎样判断一段代码运行的速度呢。我们当然不能实际测试机器跑一段代码用了多久,因为这样限制性很强。如果对于一段代码进行大量的数据测试,软件开发成本将变的极其高昂。因此,我们应该将重心放在关键的操作上面,即核心代码执行了多少次。这样一来我们就找到了相对公允的判断标准

规模问题

我们知道,计算机执行次数一般非常非常多,这就导致了两端代码的执行次数函数在低数据量和高数据量的条件下可能会有截然不同的表现。我们应该在定义阶段将这个问题尽量简化,以期得到一种最简单的表达形式

函数增长

一般来说,计算机的执行次数都是十分巨大的,因此我们不需要在意倍数关系或者常数的加减关系。我们需要关心的就是存在指数爆炸的指数关系。换言之,我们在得到核心代码执行次数的函数表达之后,只需要找到这一函数的最高次幂,以其为代表进行比较即可

大O记法一般规则

1、随着规模的增大,可以忽略与n最高次项相乘的常数
2、随着规模的增大,常熟操作可以忽略不计
3、算法函数中n最高次幂越小,算法效率越高
4、用常数1取代运行时间中的所有加法常数
5、在修改后的运行次数函数中,只保留最高次项
6、如果最高阶项存在,且常数因子不为1,则去除该常数因子

常见大O阶

1、线性阶:O(n) -->单层循环常见
2、平方阶:O(n^2) -->双层循环常见
3、立方阶:O(n^3) -->三层循环常见
4、对数阶:O(logn) -->随着输入规模的扩大,底数被忽略,仅保留真数
5、常数阶:O(1) -->执行次数为常数次

空间复杂度

指程序中占用的内存数量,由于计算机硬件水平日益提高,出现了很多牺牲空间复杂度换取时间复杂度的算法实例。只要不是涉及大规模数据存储调用,对于内存的开销基本可以忽略

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值