時間複雜度 && 空間複雜度
阿新 • • 發佈:2020-08-29
時間複雜度:執行演算法需要消耗的時間長短
空間複雜度:執行當前演算法需要消耗的儲存空間大小
求解演算法時間複雜度的具體步驟:
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 }