【數據結構與算法】時間複雜度和空間複雜度

1、階數比較ide

時間複雜度判斷理論:O(1) <= O(log2(n)) <= O(n) <= O(n*log2(n)) <= O(n^2) <=...<=O(n^k) <= O(2^n)blog

2、計算方法it

用常數1代替運行時間中的全部加法常數for循環

修改後的運行次數中只保留最高階項class

去除最高階項的係數循環

3、常見的求時間複雜度例子方法

一、常數階im

int a=1;
int b=a+2;

這種只執行常數規模的狀況時間複雜度是O(1)img

二、對數階(O(log2n))di

1 int n=100;
2 int i=1;
3 while(i<=n){
4 i=i*1;
5 }

在while循環裏每次都將i乘以2,i距離n愈來愈近,若是循環x次以後i大於n此時這個循環退出也就是說2的x次方等於n那麼x=log2n也就是說當循環log2n次之後,這個代碼就結束了,此時這個短髮的時間複雜度是O(log2n),o(LOG2n)的這個n是隨着代碼變化的,若是裏面不是2倍遞增則將發生相應變化eg:i=i*3 則時間複雜度爲O(log3n)

三、線性階

1 int j=0;
2 for(int i=1;i<=n;i++){
3 j++;
4 }

這個代碼,for循環裏面的代碼會執行n編,所以它消耗的時間是隨着n的變化而變化O(n)

四、線性對數階O(nlogN)

1 int j=0;
2 for(int i=1;i<=n;i++){
3 j=1;
4 while(j<n){
5 j=j*2;
6 }
7 }

線性對數階O(nlogN) 其實很是容易理解,將時間複雜度爲O(logn)的代碼循環N遍的話,那麼它的時間複雜度就是 n * O(logN),也就是了O(nlogN)。

五、平方階O(n2)

1 int a=0;
2 for(int i=1;i<=n;i++){
3     for(int j=1;j<=n;j++){
4        a=a+1;
5       j++;
6     }
7 }

若是把 O(n) 的代碼再嵌套循環一遍,它的時間複雜度就是 O(n²),這段代碼其實就是嵌套了2層n循環,它的時間複雜度就是 O(nn),即 O(n²) 若是將其中一層循環的n改爲m,那它的時間複雜度就變成了 O(mn)

1 for(i=o;i<n;i++){
2 
3         for(j=i;j<n;j++){
4           
5 }       
6 
7  }

 這裏分析下,當i=0的時候,J能夠循環N次,i=1的時候,J循環N-1次,因此得出:

  n+n-1+n-2+.....+1=(n+1)*n/2=N^2/2+N/2;也是O(n2)

六、k次方階

同2次方階

 

相關文章
相關標籤/搜索