1、大O複雜度表示法
1.1、從維度劃分
從維度劃分可分爲:時間複雜度、空間複雜度
1.1.1、時間複雜度
概念
代碼執行時間隨數據規模增長的變化趨勢
多項式量級複雜度分析規則(非多項式量級不常見暫不考慮)
順序相加,嵌套相乘,取最高階
階數排序
冪階()>線性對數階()>線性階()>對數階()>常數階(1)
舉例
int a=0;
for(int i=0;i<n;i++){
a=a+1;
for(int j=0;j<n;j++){
a=a+2;
}
}
int b=1;
while(b <= n){
b=b*10;
}
第一行:執行1次
第二行:循環執行n次
第三行:循環執行n次
第四行:循環執行次
第五行:循環執行次
第八行:循環執行次
總計:次,取最高階T(n)=O()
1.1.2、空間複雜度
概念
算法的存儲空間隨數據規模增長的變化趨勢
舉例
int[] arr = new int[n];
空間複雜度T(n)=O()
1.2、從分析角度劃分(以時間複雜度爲例)
從分析方面可分爲:最好情況時間複雜度、最壞情況時間複雜度、平均情況時間複雜度、均攤時間複雜度
1.2.1、最好情況時間複雜度
概念
在最理想的情況下,執行算法的時間複雜度
1.2.2、最壞情況時間複雜度
概念
在最糟糕的情況下,執行算法的時間複雜度
###1.2.3、平均情況時間複雜度
概念
在所有情況下,執行算法的時間總和的平均值
1.2.4、均攤時間複雜度
概念
大部分情況下時間複雜度都很低,只有個別情況下時間複雜度比較高,而且這些操作之間存在前後連貫的時序關係,這個時候,我們就可以將這一組操作放在一塊兒分析,看是否能將較高時間複雜度那次操作的耗時,平攤到其他那些時間複雜度比較低的操作上
舉例
int a=0;
for(int i=0;i<n;i++){
a=a+1;
if(a == x){
break;
}
}
最好情況時間複雜度:循環第一次就能跳出循環,時間複雜度爲O(1)
最壞情況時間複雜度:循環到最後一次才跳出循環,或者直到循環結束,時間複雜度爲O(n)
平均情況時間複雜度:循環到中間某次就跳出循環,,T(n)=O(n)
均攤時間複雜度:本例用不到(不太常用就不計算了哈哈)