数据结构和算法分析学习笔记——复杂度分析

复杂度分析

本文只是我的个人学习笔记,用于记录数据结构和算法的学习总结。

如何得到算法的执行效率?

  1. 事后统计
    方式:直接在设备上运行得到结果
    缺点:测试结果受测试环境和测试数据规模影响

  2. 复杂度分析
    方式:时间复杂度分析和空间复杂度分析,直接通过代码就可以粗略的计算出算法的执行效率。通过 大 O 来表示

时间复杂度

时间复杂度:全名是渐进时间复杂度,标识代码执行时间随数据规模增长变化的趋势。通常我们会忽略掉公式中的常量、低阶、系数,只记录最大的量级。例如:T(n) = O(2n+2) 和 T(n) = O( 2n^2 +2n+3 )就可以记为:T(n) = O(n) 和 T(n) = O( n^2 )。

如何计算

我们在分析一个算法、一段代码的时间复杂度的时候,只关注循环次数最多那一段代码。这段核心代码执行次数的n的量级,就是整段要分析代码的时间复杂度。

需要遵循以下几点:

  • 加法法则:总的时间复杂度就等于量级最大的那段代码的时间复杂度

  • 乘法法则:嵌套代码的复杂度等于嵌套内外代码复杂度的乘积

常见的时间复杂度量级
  • 多项式量级:O(1)、O(n)、O(logn)、O(nlogn)、O(n^k )

  • 非多项式量级:O( 2^n )和O(n!)

空间复杂度

空间复杂度:渐进空间复杂度,表示算法的存储空间与数据规模之间的增长关系。常见的空间复杂度就是 O(1)、O(n)、O(n^2 )。

最好、最坏、平均、均摊时间复杂度

最好时间复杂度和最坏时间复杂度

最好时间复杂度:在最理想的情况下,执行这段代码的时间复杂度。
最坏时间复杂度:在最坏的情况下,执行这段代码的时间复杂度。

例如:查找一个无序数组中的元素x,如果该数组的第一个元素就是x,那么就是最好的时间复杂度。如果最后一个元素是元素x,那么就是最坏时间复杂度。

平均时间复杂度

平均时间复杂度:全称加权平均时间复杂度或者期望时间复杂度。它的值是代码在所有情况下执行的次数的加权平均值。

均摊时间复杂度

均摊时间复杂度: 一种特殊的平均时间复杂度,一般满足下面两个条件使用:

  • 代码在绝大多数情况下是低级别复杂度,只有极少数情况是高级别复杂度。
  • 低级别和高级别复杂度出现具有时序规律。均摊结果一般都等于低级别复杂度。

小结

复杂度也就是渐进时间复杂度,越高阶复杂度的算法,执行效率越低。常见的复杂度从低阶到高阶有:O(1)、O(logn)、O(n)、O(nlogn)、O(n^2 )。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值