アルゴリズムとデータ構造[]複雑分析

       この記事書類アルゴリズムの複雑さのブロガー分析、いくつかの共通の複雑さ、および平均時間の複雑さ、最高の要約/複雑最悪の時間。

複雑性分析

  アルゴリズムの複雑さについては、我々は通常の仮定、複雑な空間の分析に基づいて、時間の単位、およびように、私たちはコードの各行の実行時間が同じであると仮定し、ここで、ビッグOを表現するために、この時間を使用しています。上記のコードの最初の分析が、時間複雑さがループのための2つ続いて、2-4行3第6行の時間複雑さがnもあるが、時間複雑さのために最初のループは、nがループの内部のための時間の複雑さは、2 * N * Nです。合計時間の複雑さは、2 * N * N + 2 * N + 3と比較します。このように、アルゴリズムの時間複雑度は、O(2 * N * N + 2 * N + 3)です。分析の複雑さに関しては、ノートには3つのポイントがあります。

  図1に示すように、全体的な時間計算量はコードの終わり、こと複雑さの最大次数に等しいアルゴリズムの時間複雑さの解析時間は、しばしば見過ごされている一定の順序低レベル係数。そのため、アルゴリズムの分析時間の複雑さは、我々は唯一のできる最大期間の大きさに焦点を当てる必要があります。

  図2は、乗算ルール:ネストされたネストされたコードは、インビボでのコード実行時間の積に等しいです私たちは、基本的には、このルールを使用して、ループの入れ子の中に見つけることができます。以下のコードは、外側ループの複雑度はO(3×n)は、第二サイクルの複雑さはO(2 * N)であり、全体のコードの時間複雑度はO(2 * N)であります* O(N)+ O(従って、コードの複雑さを変更するには、O(N * N)であります

1   INT CAL(int型N){
 2     INTの和= 0 3     INT iが= 1 4     int型の J = 1 5     のための(; I <= N; ++ I){
 6       J = 1 7       のための(; J <= N; ++ J){
 8         和= I * +和J。
9       }
 10     }
 11   }

 

いくつかの一般的な複雑さ

  以下の共通の時間複雑さ:2つのカテゴリに分かれて、注文の二つの非多項式多項式、非多項式が2件の持っている順評価:階乗のインデックスと順位を。この大きさの複雑さの問題は、NP困難な問題として知られています。

   一定の順序O(1)

int型、A = 0 ;
int型 B = ;
int型私は、

  Oのオーダー(LOGN)

1   私は= 1 ;
2   一方、(I <= N){
 3     私* = 2 ;
4   }

 

  2のX = n乗は、x = LOG2で得られたN個の時間複雑度係数が無視される場合、コード現在の時間複雑度はO(Nログ)であるOマークを表すことができ、最初に留意すべき場合異なる基板間のルールの数の計算はlog3n = log32 * log2n、お互いに変換することができるので、2行3に3は、依然として時間複雑度は、O(Nログ)であります

  Oの線形順序(nlogn)

1   私は= 1 ;
2   J = 1 3   しばらく(I <= N){
 4     ながら(j <= N)
 5       私* = 2 ;
6   }

 

  O(M + N)

1つの int型の CAL(INT M、INT N){
 2    INT sum_1 = 0 3    INT iが= 1 4    のための(; I <M; ++ I){
 5      sum_1 = sum_1 + I。
6    }
 7    INT sum_2 = 0 8    int型の J = 1 9    (; J <N; ++ j)は{
 10      sum_2 = sum_2 + J。
11    }
 12   リターン sum_1 + sum_2。
13 }

 

  O(M * N)

1つの int型の CAL(INT M、INT N){
 2    INT sum_2 = 0 3    int型 J = 1は、私は= 1 ;
4    のための(; J <N ++ J){
 5        のための(; I <M; ++ I)
 6        sum_2 = sum_2 + J。
7    }

 

第三に、最高/最悪、平均時間の複雑さ

1  // N-配列は、長さの配列を表し
2  INTの検索を(INT []配列は、INT n-は、INT X){
 3    INT Iは= 0 ;
 4    INT POS = - 1 ;
 5。   ため(; I <n-は、++ I) {
 6      IF(配列[I] == X)POS = I;
 7    }
 8。   リターンPOS;
 9 } 

  最高の時間の複雑さ

  ベスト・ケースの時の複雑さは、このコードの最良の場合の実行時間の複雑さに、あります。一例として上記のコード、検索機能のためのコードは、アレイ内のデジタル焦点位置を見つけ、理想的な状況は、我々は数字の配列を見つける最初の位置である、時間複雑度はO(1)です。

  最悪時間計算量

  最悪の時間の複雑さは、このコードの最悪実行時間の複雑さに、あります。あるいは、上記のコードでは、例えば、最悪の場合には、我々は数が配列ではありません検索すると、あなたはO(n)は、この時のために、アレイ全体、アルゴリズムの時間の複雑さを横断する必要があります。

  平均時間の複雑さ

  平均時間計算アルゴリズムは、それぞれの場合を考慮することで、それぞれの場合の実行時間を加算した後、全ての可能な場合の数で割った、それは要素数の平均値を得ることができるが横断する必要があります。このコードの上記の分析の平均時間計算量の合計N + 1の場合は、(0〜N-1が見出さ又はnが見つかりません)我々は、アルゴリズム(1 + 2 + ...... + nの平均時間計算することを見ることができます + N)/ N + 1 = N (N + 3)/ [2(N + 1)]、 我々は、平均的な複雑さはO(N)で得ることができます。

  平均時間の複雑さなどと同様に、時間の加重平均、各起こっ統計の確率がでてきます。確率論の加重平均であり、各ケースが発生する確率は加重平均時間計算量Oを得るために、1 /(1 + N)を乗算して平均時間複雑さに基づいて、1 /(1 + N)を超えています(1) 。

おすすめ

転載: www.cnblogs.com/Trevo/p/11983888.html