算法的复杂度分析到底是什么?

开发中,对多个算法的执行效率和内存占用分析即算法复杂度分析,分为时间和空间复杂度分析。本文梳理核心理论,介绍时间复杂度的大O表示法、复杂度量级,以及最好、最坏、平均、均摊情况时间复杂度,还提及空间复杂度概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

开发中,可能有多种算法能实现同样一个业务功能

当对软件运行效率等有严格要求时,我们就要对多个算法的执行效率和内存占用进行分析

这种分析就是算法的复杂度分析,具体可分为时间复杂度和空间复杂度的分析

掌握了复杂度分析是写出优秀算法的前提

本文将不涉及具体的复杂度分析,只将最核心的理论梳理出来

时间复杂度


它是渐进时间复杂度的简称,表示代码执行时间随数据规模增长的变化趋势,并不代表代码真正的执行时间

大O表示法

当数据量 n 很大时,公式中的低阶、常量、系数三部分并不左右增长趋势,所以都可以忽略

我们只需要记录一个最大量级就可以了

复杂度量级

复杂度量级有以下几种,它们代表的算法效率由上到下,由左到右越来越低,NP 问题可以考虑使用贪婪算法快速找到近似解

多项式量级非多项式量级(NP)
常量阶指数阶
对数阶 (提示:求解 2x=n )阶乘阶(旅行商问题)
线性阶
线性对数阶
平方阶
立方阶
k 次方阶

如果同一算法在不同的输入情况下,复杂度有量级的差距,那么复杂度还可以再分为以下几种:

最好、最坏情况时间复杂度
平均情况时间复杂度

计算过程涉及到概率

均摊时间复杂度

场景: 对一个数据结构进行一组连续操作中,大部分情况下时间复杂度都很低,只有个别情况下时间复杂度比较高,而且这些操作之间存在前后连贯的时序关系

摊还分析:这种场景中,我们就可以将这一组操作放在一块儿分析,看是否能将较高时间复杂度那次操作的耗时,平摊到其他那些时间复杂度比较低的操作上

在能够应用均摊时间复杂度分析的场景,一般均摊时间复杂度就等于最好情况时间复杂度

空间复杂度


它是渐进空间复杂度的简称,表示代码占用的存储空间随数据规模增长的变化趋势,其他概念与时间复杂度类似

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值