【数据结构point】时间复杂度

时间复杂度分析

  1. 基本操作,即只有常数项,认为其时间复杂度为O(1)
  2. 顺序结构,时间复杂度按加法进行计算
  3. 循环结构,时间复杂度按乘法进行计算,循环次数乘以循环体代码的复杂度(例:for,while)
  4. 分支结构,时间复杂度取最大值(例:switch,if-else)
  5. 判断一个算法的效率时,往往只需要关注操作数量加法项中的最高次项,其它次要项和常数项可以忽略
  6. 在没有特殊说明时,我们所分析的算法的时间复杂度都是指最坏时间复杂度

常见时间复杂度

O(1)<O(logn)<O(n)<(nlogn)
<O(n2n^2)<O(n3n^3)<O(2n2^n)<O(n!)
【数据结构point】时间复杂度
一般我们都是将代码的时间复杂度控制在O(logn),O(n),O(nlogn),O(n2n^2)这四个范围值内

例题

给定N个整数的序列{A1A_1,A2A_2,…,ANA_N},求函数f(i,j)=maxf(i,j)=max{0,k=ijAk0,\sum_{k=i}^{j} A_k}

算法1

T(N)=nn(1+n(1+max(1,0)))n*n*(1+n*(1+max(1,0)))=2n3+n22n^3+n^2=O(n3)O(n^3)

【数据结构point】时间复杂度

算法2

T(N)=n(1+n(1+max(1,0)))n*(1+n*(1+max(1,0)))=2n2+n2n^2+n=O(n2)O(n^2)
【数据结构point】时间复杂度

算法3

【数据结构point】时间复杂度

算法4

T(N)=n(1+max(1,0))=2n=O(n)T(N)=n*(1+max(1,0))=2n=O(n)

【数据结构point】时间复杂度