数据结构与算法之美二复杂度分析

数据结构和算法是解决快和省的问题。所以执行效率是算法一个非常重要的考量指标。而衡量算法代码的执行效率就是时间、空间复杂度分析

复杂度分析是整个算法学习的精髓,掌握了他,就掌握了数据结构和算法一半得内容

大O复杂度表示法

T(n)=O(fn)

一、什么是复杂度分析?
  1. 数据结构和算法是:“如何让计算机更快时间、更省空间的解决问题”。
  2. 因此需要从执行时间和占用空间两个维度来评估数据结构和算法的性能。
  3. 分别用时间复杂度和空间复杂度两概念来描述性能问题,二者统称复杂度。
  4. 复杂度描述的是算法执行时间(占用空间)与数据规模的增长关系。
二、为什么要进行复杂度分析

1.和性能测试相比,复杂度分析不依赖执行环境,成本低,效率高,易操作,指导性强的特点。
2.掌握复杂度分析,将能编程性能更优的代码,有利于降低系统的开发和维护成本。

三、如何进行复杂度分析

1.大O表示法
1)来源
算法的执行时间与每行代码的执行次数成正比,用T(n)=O(fn)表示,其中T(n)表示算法执行总时间,f(n)表示每行代码执行的次数,而n往往表示数据的规模
2)特点
以时间复杂度为例,由于时间复杂度描述的是算法的执行时间与数据规模的增长变化趋势,所以常量阶、低阶、以及系数实际对这种增长趋势不产生决定性影响。所以在做时间复杂度分析时忽略这些项。
2复杂度分析规则
1)单段代码看高频,比如循环
2)多段代码取最大,比如一段代码中有单循环和多循环,那么取多循环的复杂度。
3)嵌套代码求乘积,比如递归,多重循环。
4)多个规模求加法,比如有两个参数控制的循环次数,那么这时候去二者复杂度相加。

四、常用的复杂度级别

多项式阶:随着数据规模的增长,算法的执行时间和占用空间,按照多项式的比列增长。
包括:O(1)(常数阶),O(logn)(对数阶),O(n)(线性阶),O(nlogn)(线性对数阶),O(n^2)(平方阶), O(n^3)(立方阶)
非线性阶:随着数据规模的增长,算法的执行时间和占用空间暴增。这种算法的性能极差,包括:O(2^n)(指数阶),O(n!)(阶乘阶)。

如何掌握:无他,孰能生巧。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值