循环嵌套时间复杂度_01 复杂度分析

复杂度分析是评估算法效率的重要手段,关注点包括循环、递归和嵌套循环。常见时间复杂度有O(1)到O(n!),空间复杂度则关注额外内存。理解这些可以帮助我们避免低效实现,提升工作效率。最佳、最坏和平均时间复杂度提供了全面性能考量。在实际分析中,根据情况选择关注的复杂度类型。

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

为何要了解复杂度分析

虽然说,代码写出来跑一遍结果可能更清晰直观,但受机器、数据量大小影响较大,且代码实现所需要使用的时间本身也是一种成本。如果通过复杂度分析,可以提前Pass掉一部分明显不合理的实现,可以有效提高我们的工作效率。

时间复杂度

分析时需要着重关注的点

1. 循环,通常是执行次数最多的地方;

2. 针对递归、嵌套循环,总复杂度是乘出来的;

3. 总复杂度等于量级最大的代码段的复杂度(当数据量到达一定程度时,低量级的可以忽略)。

常见的时间复杂度

O(1)

常量级。

通常代码中只要没有循环、递归操作,代码量再多也可以认为是常量级。

O(logn)

对数级。

如:在一个有序数组中二分查询某个数。

O(n)

线性级。

如:在数组中查找一个最大值。

O(nlogn)

线性对数级。

如:归并排序,快速排序。

O(n^k)

平方级、立方级、k次方级。

如:冒泡排序(平方级)等多层嵌套循环。

O(k^n)

指数级。

随着n的规模越大,算法执行时间会急剧增加,算法效率低下。

如:斐波那契额数列的低配版实现(无动态规划优化)。

O(n!)

阶乘级。

随着n的规模越大,算法执行时间会急剧增加,算法效率低下。

空间复杂度

分析方法和时间复杂度类似,区别在于空间复杂度关注的是代码执行时额外申请的内存空间。

常见的空间复杂度

O(1)、O(n)、O(n^2),比起时间复杂度的分析,要简单不少。


最好时间复杂度

最理想情况下,执行代码段的时间复杂度。

最坏时间复杂度

最糟糕情况下,执行代码段的时间复杂度。

平均时间复杂度

加权平均值,受具体算法和输入的影响,权重也会有所不同。

均摊时间复杂度

一种特殊的平均时间复杂度。如Java中支持动态扩容的ArrayList,平时Add时,时间复杂度是O(1),但在空间不足时进行Add,此时附加的扩容操作时间复杂度为O(n),但平摊下来其实整体时间复杂度仍为O(1)。

通常情况下,分析复杂度的时候,用一个复杂度就可以满足需求。除非碰到那种不同情况下,复杂度出现量级的差异,才会考虑几种复杂度都分析一遍。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值