亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

數據結構和算法(二)復雜度分析

標簽:
數據結構

一、什么是复杂度分析

  1. 数据结构和算法是解决“让计算机如何更快时间、更省空间的解决问题”

  2. 因此需要从运行速度和占用空间两个维度评估数据结构和算法的性能

  3. 分别用时间复杂度 和空间复杂度两个概念来描述性能问题,二者统称为复杂度。

  4. 复杂度描述的是算法执行时间(或者占用空间)与数据规模的增长关系

二、为什么要进行复杂度分析

  1. 和性能测试相比,复杂度分析不依赖执行环境、成本低、效率高、易操作、指导性强的特点。

  2. 掌握复杂度分析,将能写出性能更优的代码,有利于降低系统开发和维护成本

三、如何进行复杂度分析

  1. 大O表示法

    1)来源

    算法的执行时间与每行代码的执行次数成正比,用T(n)=O(f(n))表示算法执行总时间,

   f(n)表示每行代码执行总次数,而n往往表示数据的规模

     2)特点

      以时间复杂度为例,由于时间复杂度描述的是算法执行时间与数据规模的增长 变化趋势,所以常量阶、低阶以及系数实际上对这种增长趋势不产生决定性影响,所以在做时间复杂度分析时忽略这些项。

2.复杂度分析法则

  1)单段代码看高频:比如循环

  2)多段代码取最大:比如一段代码有单循环和多循环,那么取多循环的复杂度

 3)嵌套代码求乘积:比如递归、多重循环等

 4)多个规模求加法:比如有两个参数控制两个循环的次数,那么这时就取二者复杂度相加。

四、常用的复杂度级别

多项式阶:随着数据规模的增长,算法的执行时间和空间占用,按照多项式的比例增长。包括

O(1)(常数阶)、O(logn)(对数阶)、O(n)(线性阶)、O(n^2)(平方阶)、O(n^3)(立方阶)

非多项式阶:随着数据规模的增长,算法 的执行 时间和空间占用暴增,这类算法性能极差。包括

O(2^n)(指数阶)、O(n!)(阶乘阶)

如何掌握复杂度分析法

无他,熟能生巧。


最好情况时间复杂度(best case time complexity):在最理想的情况下,执行这段代码的时间复杂度

最坏情况时间复杂度(worst case time complexity) :在最糟糕的情况下,执行这段代码的时间复杂度

均摊时间复杂度(amortized time complexity):

平均情况时间复杂度  (average case time complexity)

练习题:

// 全局变量,大小为 10 的数组 array,长度 len,下标 i。
    int array[] = new int[10];
    int len = 10;
    int i = 0;
// 往数组中添加一个元素void add(int element) { 
  if (i >= len) { // 数组空间不够了    
 // 重新申请一个 2 倍大小的数组空间    
  int new_array[] = new int[len*2];    
   // 把原来 array 数组中的数据依次 copy 到 new_array 
  for (int j = 0; j < len; ++j) { 
   new_array[j] = array[j];   
    }   
 // new_array 复制给 array,array 现在大小就是 2 倍 len 了
  array = new_array;     len = 2 * len; 
   }   
  // 将 element 放到下标为 i 的位置,下标 i 加一
  array[i] = element;
  ++i;
 }


                    ---特别说明,本系列(数据结构和算法)非原创,只是个人学习笔记。






點擊查看更多內容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
JAVA開發工程師
手記
粉絲
7
獲贊與收藏
12

關注作者,訂閱最新文章

閱讀免費教程

  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消