zoukankan      html  css  js  c++  java
  • 数据结构之复杂度分析

    1. 复杂度分析目的:判断算法程序的执行效率。
    2. 事后统计法分析算法复杂度的局限性
    • 测试结果依赖运行环境
    • 测试结果受数据规模和数据的有序性影响比较大

      3. 常见的复杂度分析

    • 大O表示法
    • 时间复杂度:不表示代码具体的执行时间,而是表示代码执行时间随数据规模增长的变化趋势
    • 分析方法
    • 只关注执行次数最多的一段代码
    • 加法法则:总复杂度等于量级最大的那段代码的复杂度。例:T1(n)=O(f(n)),T2(n)=O(g(n)),则T(n)=T1(n)+T2(n)=max(O(f(n)),O(g(n)))=O(max(f(n),g(n)))
    • 乘法法则:嵌套代码的复杂度等于嵌套内外代码复杂度的乘积
    • 空间复杂度算法的存储空间与数据规模之间的增长关系

     

    4.最好、最坏、平均时间复杂度以及均摊时间复杂度

    • 最好:理想情况下,执行一段代码的时间复杂度
    • 最坏:最糟糕情况下,执行一段代码的时间复杂度(一般情况下讨论的时间复杂度均为最坏时间复杂度
    • 平均:引入概率论知识,即加权平均时间复杂度或者期望时间复杂度
    • 摊还:(特殊情况的平均时间复杂度)利用摊还分析法或者平摊分析
    • 特殊情况下的应用场景:数据结构在一组连续操作中,大部分情况下的时间复杂度都很低,极个别情况的复杂度很高,并且这些操作之间存在前后连贯的时序关系。此时,可将这一组操作放在一起进行分析,是否能够将复杂度较高的那次操作的耗时,平摊到其它时间复杂度比较低的操作上。一般情况下,等于最好情况时间复杂度。

    5.补充知识

    • 等差数列:如果一个数列从第二项起,每一项与它的前一项的差等于同一个常数,这个数列就叫做等差数列,而这个常数叫做等差数列的公差,公差常用字母d表示
    • 通项公式为:an=a1+(n-1)*d。首项a1,公差d
    • 前n项和公式为:Sn=a1*n+[n*(n-1)*d]/2==Sn=[n*(a1+an)]/2==Sn=d/2*n²+(a1-d/2)*n
    • 等比数列:如果一个数列从第2项起,每一项与它的前一项的比等于同一个常数,这个数列就叫做等比数列。这个常数叫做等比数列的公比,公比通常用字母q表示
    • 等比数列的通项公式是:
    • 等比求和:
      ①当q≠1时,
       或
      ②当q=1时,
    • 等比数列和等差数列的关系:一个各项均为正数等比数列各项取同底数数后构成一个等差数列;反之,以任一个正数C为底,用一个等差数列的各项做指数构造幂Can,则是等比数列
  • 相关阅读:
    贝塞尔曲线实现的购物车添加商品动画效果
    Rxjava学习(一基础篇)
    OkHttp3源码详解(三) 拦截器-RetryAndFollowUpInterceptor
    ViewDragHelper详解(侧滑栏)
    linux系统装windows时需要注意的问题
    ARM GCC 内嵌汇编手册
    ADS的默认连接分析及编译器产生符号解惑
    ARM 的Thumb状态测试
    load-store/register-memory/register-plus-memory比较
    进位位(carry)与溢出位(overflow)的区别
  • 原文地址:https://www.cnblogs.com/zyj-0917/p/12726637.html
Copyright © 2011-2022 走看看