数据结构之复杂度分析

  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,则是等比数列

 

posted @ 2020-04-18 16:43  不屈小二  阅读(237)  评论(0编辑  收藏  举报