アルゴリズム効率
アルゴリズム効率分析には 2 つのタイプがあります。1 つ目は時間効率で、2 つ目はスペース効率です。時間効率は時間複雑度と呼ばれ、空間効率は
空間複雑度と呼ばれます。時間複雑度は主にアルゴリズムの実行速度を測定し、空間複雑度は主にアルゴリズムが必要とする余分なスペースを測定します。
時間の複雑さ
コンセプト
アルゴリズムの時間計算量は数学関数であり、アルゴリズムの基本操作の実行回数がアルゴリズムの時間計算量です。
大きなOの漸近表記
1. 実行時のすべての加算定数を定数 1 に置き換えます。
2. 修正稼働時間関数では、最上位項のみが保持されます。
3. 最上位の項目が存在し、1 でない場合は、この項目に掛けられた定数を削除します。結果は大○オーダー。
一部のアルゴリズムの時間の複雑さには、最良、平均、および最悪のケースが
あります
。
ラン (下限)
一般的なケースは、アルゴリズムの最悪のケースの実行に関係しています。
一般的な時間計算量の計算例
// 计算bubbleSort的时间复杂度
void bubbleSort(int[] array) {
for (int end = array.length; end > 0; end--) {
boolean sorted = true;
for (int i = 1; i < end; i++){
if (array[i - 1] > array[i]){
Swap(array, i - 1, i);
sorted = false;
}
}
if(sorted == true) {
break;
}
}
}
最悪の場合: 配列が n 個の要素を持ち、実行回数が n-1+n-2+n-3+...+1=n(n-1)/2 であると仮定すると、配列は降順になります。最悪の場合の時間計算量は
O(n^2) です。
最良のケース: 配列は昇順で、最初のパスの後に交換は必要なく、実行回数は n-1 です。
最良のケースの時間計算量は O(n) です。
再帰の時間計算量 = 再帰回数 * 各再帰後の実行回数
// 计算斐波那契递归fibonacci的时间复杂度?
int fibonacci(int N) {
return N < 2 ? N : fibonacci(N-1)+fibonacci(N-2);
}
スペースの複雑さ
スペースの複雑さは、操作中にアルゴリズムによって一時的に占有されるストレージ スペースの量の尺度です。
追加の収納スペースとして理解できます。
/
/ 计算斐波那契递归fibonacci的空间复杂度?
int fibonacci(int N) {
return N < 2 ? N : fibonacci(N-1)+fibonacci(N-2);
}
空間の複雑さは O(n) です。