1. 程式人生 > 實用技巧 >時間複雜度 && 空間複雜度

時間複雜度 && 空間複雜度

時間複雜度:執行演算法需要消耗的時間長短

空間複雜度:執行當前演算法需要消耗的儲存空間大小

求解演算法時間複雜度的具體步驟:

  1.找出演算法中的基本語句:演算法中執行次數最多的那條語句,通常是最內層迴圈的迴圈體

  2.計算基本語句的執行次數:只需保證基本語句執行次數的函式中的最高

複雜度對應的演算法型別

  常數階O(1):

int a=0;
int a=9;
int c=8;

  線性階O(n):

for(i=0;i<=n;i++)
{
  j=i;
  j++;    
}

  平方階O(n^2): 立方階O(n^3)就是有三層迴圈

for(x = 1; i <= n; x++){
   for(i = 1; i <= n; i++) {
       j = i;
       j++;
    }
}

  對數階O(logN)

int i=1;
while(i<n){
  i=i*2;  
}

  線性對數階O(nlongN)

for(int i=0;i<n;i++)
{
    while(i<n){
        i=i*2;
    }
}

  

空間複雜度

計算方法;

1.忽略常數,用O(1)表示

2.遞迴演算法的空間複雜度=遞迴深度*每次遞迴所用分輔助空間

3.對於單執行緒,遞迴有執行的是堆疊,求的是遞迴最深的那一次壓棧所耗費的空間個數,因為遞迴最深的那一次所耗費的空間足矣容納所有的遞迴

空間複雜度O(n)=O(1)

1 int a;
2 int b;
3 int c;
4 printf("%d %d %d \n",a,b,c);

  空間複雜度O(n*1)=O(n)。

1 int fun(int n,)
2 {
3 int k=10;
4 if(n==k)
5 return n;
6 else
7 return fun(++n);
8 }