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

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

三、如何进行复杂度分析?

1.大O表示法
1)来源
算法的执行时间与每行代码的执行次数成正比,用T(n) = O(f(n))表示,其中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!)(阶乘阶)

五、如何掌握好复杂度分析方法?
复杂度分析关键在于多练,所谓孰能生巧。

六、复杂度分析的4个概念
1.最坏情况时间复杂度:代码在最理想情况下执行的时间复杂度。
2.最好情况时间复杂度:代码在最坏情况下执行的时间复杂度。
3.平均时间复杂度:用代码在所有情况下执行的次数的加权平均值表示。
4.均摊时间复杂度:在代码执行的所有复杂度情况中绝大部分是低级别的复杂度,个别情况是高级别复杂度且发生具有时序关系时,可以将个别高级别复杂度均摊到低级别复杂度上。基本上均摊结果就等于低级别复杂度。

七、为什么要引入这4个概念?
1.同一段代码在不同情况下时间复杂度会出现量级差异,为了更全面,更准确的描述代码的时间复杂度,所以引入这4个概念。
2.代码复杂度在不同情况下出现量级差别时才需要区别这四种复杂度。大多数情况下,是不需要区别分析它们的。

八、如何分析平均、均摊时间复杂度?
1.平均时间复杂度
代码在不同情况下复杂度出现量级差别,则用代码所有可能情况下执行次数的加权平均值表示。
2.均摊时间复杂度
两个条件满足时使用:1)代码在绝大多数情况下是低级别复杂度,只有极少数情况是高级别复杂度;2)低级别和高级别复杂度出现具有时序规律。均摊结果一般都等于低级别复杂度。

转载于:https://www.cnblogs.com/756623607-zhang/p/9758261.html

算法之如何进行算法复杂度分析相关推荐

  1. 【数据结构与算法-java实现】二 复杂度分析(下):最好、最坏、平均、均摊时间复杂度的概念

    上一篇文章学习了:如何分析.统计算法的执行效率和资源消耗? 点击链接查看上一篇文章:复杂度分析上 今天的文章学习以下内容: 最好情况时间复杂度 最坏情况时间复杂度 平均情况时间复杂度 均摊时间复杂度 ...

  2. 【数据结构与算法-java实现】一 复杂度分析(上):如何分析、统计算法的执行效率和资源消耗?

    今天开始学习程序的灵魂:数据结构与算法. 本文是自己学习极客时间专栏-数据结构与算法之美后的笔记总结.如有侵权请联系我删除文章. 我们都知道,数据结构和算法本身解决的是"快"和&q ...

  3. python实现堆排序用类的方法_GitHub - lil-q/sorting-algorithm-python: 十种排序算法的python实现及复杂度分析...

    排序 分类 评价排序算法的几个指标: 时间复杂度:包括平均时间复杂度.最坏时间复杂度和最好时间复杂度.一般而言,好的性能是$$O(nlog_2n)$$,坏的性能是$$O(n^2)$$.对于一个排序理想 ...

  4. 数值优化:经典随机优化算法及其收敛性与复杂度分析

  5. python素数最优算法_几种简单的求素数算法的复杂度分析

    素数的算法有很多种,现在主要讲两种算法及其改进版本的复杂度分析,解释性能提升的幅度.同时应用一个素数定理:素数的平方一定是合数,那么在范围内最大数的开方范围内找不到能整除的数,那么这个数是素数.应用这 ...

  6. 算法笔记(一):复杂度分析:最好、最坏、平均、均摊

    数据结构指的是"一组数据的存储结构", 算法指的是"操作数据的一组方法". 数据结构是为算法服务的,算法是要作用再特定的数据结构上的. 效率和资源消耗的度量衡- ...

  7. 算法录 之 复杂度分析。

    一个算法的复杂度可以说也就是一个算法的效率,一般来说分为时间复杂度和空间复杂度... 注意接下来说的均是比较YY的,适用与ACM等不需严格分析只需要大致范围的地方,至于严格的算法复杂度分析的那些数学证 ...

  8. 怎么算matlab算法复杂度,算法复杂度分析

    1. 何为数据结构?何为算法? 简单来说,数据结构就是数据的存储方式,比如数组就是把数据存在一段连续的内存上,而链表则是通过指针的关联将数据存在任意可用的内存上:栈是先进后出,队列是先进先出. 而算法 ...

  9. 二分检索用途及复杂性_二分查找和三分查找哪个快?算法复杂度与常数无关?复杂度分析的常见误区...

    还记得两三年前,我初看一本算法书,看到二分查找算法的复杂度时,我发现了了不得的东西:二分查找每次查询范围减少一半,需要查询的次数是 ,它的复杂度是 . 我把它改成三分查找,每次查询两个数字与我的目标数 ...

最新文章

  1. 金蝶应收应付模块流程_金蝶KIS专业版应收应付的系统亮点功能
  2. Navicat Premium使用教程【比较详细】
  3. 把文件自动add_【Blender】常用Add-Ons
  4. ML之LoR:kaggle比赛之利用泰坦尼克号数据集建立LoR模型对每个人进行获救是否预测
  5. Qt configure 参数不完全说明
  6. 程序员谈敏捷开发团队里成员间的相互信任
  7. nlp算法文本向量化_NLP中的标记化算法概述
  8. 如何合理地建立 Mysql 索引
  9. 学习实践:使用模式,原则实现一个C++自动化测试程序
  10. 纯CSS圆角框3-圆角化图片
  11. python正则表达边界_Python之正则表达式
  12. 三维点云数据处理软件供技术原理说明_基于Geomagic Studio的点云数据处理三维建模技术...
  13. winpe查看不到linux硬盘,winpe不显示硬盘?教你轻松搞定pe下不显示硬盘问题
  14. 漏洞复现:使用Kali制作木马程序
  15. 一对一视频聊天app源码,归并排序模板
  16. jquery:关于$().css(left,)的设置;offset();offset().left();$.width();$.outerWidth();
  17. style计算机词汇,法语词汇学习:计算机及网络词汇(3)
  18. 40了解云计算平台的高可用架构,如 AWS 的多可用区、GCP 的负载均衡器
  19. python中的_和__
  20. npm报错 gyp: No Xcode or CLT version detected!

热门文章

  1. Leetcode-最佳买卖股票机含冷冻期
  2. 吴恩达机器学习笔记——第一章
  3. linux文件的特殊权限,Linux系统文件的默认权限和特殊权限
  4. 基于Android5.1的双屏异显分析
  5. Android Studio Library 模块中 Native 代码进行 debug 的一些坑
  6. Android系统进程间通信(IPC)机制Binder中的Server启动过程源代码分析
  7. Hyperledger Fabric 排序服务核心原理和工作过程
  8. themleft模板库_Thymeleaf 模板的使用
  9. gorm preload 搜索_macOS系统本地文件搜索工具
  10. Fast R-CNN《Fast R-CNN》论文笔记