[C / C ++の構文] - 時間の複雑さと空間の複雑

私たちは、主にアルゴリズム二つの角度の長所と短所を測定するための時間と空間からのアルゴリズムの品質を見て
時間を:アルゴリズムの実行時間がある
スペース:アルゴリズムは、一時的なメモリサイズであります

時間複雑

私たちは、通常使用の表記が大きいO同じコンピューターに比例したコードと実行時の各行の実行回数は、の例を見てみましょうので、時間の複雑さを示しているが

int ans = 0for(int i = 1; i <= n; i++)
{
	ans += i;
}

各行、実行回数の同じコードの実行時間を仮定。1 + +コード。3. 1 、N 3 + 1 =(N + 1)、このアルゴリズムは時間がかかり、我々は簡略化することができるので、Nの変化に変化をランダウの記号は、成長のコード実行時間の変化を示すために使用されるアルゴリズムの実行時間の真の代表を、来ていないので、なぜ、それを単純化することができ、O(N):アルゴリズムの時間複雑度は次のように表現されますトレンド。そうnが無限大であり、時間が有意の定数倍でない場合、上記の例です。
共通の時間複雑です:
複雑さが増加している時、アルゴリズムの実行の効率低下
ここに画像を挿入説明

時間の複雑さを追求

⑴基本的な文アルゴリズムを見つけます。

その文の最大数を実行するためのアルゴリズムは、基本的な文で、通常は最も内側のループサイクルです。

⑵基本文レベルの実行回数を計算し、

ただ、大きさの死刑執行の基本的な文の数を計算し、長い最大電力に対する権利の基本的な文の実行回数の関数としてとして、あなたはすべての低力率と最高の力を無視することができた意味。成長率:これはアルゴリズムの分析、そして最も重要なポイントに焦点を簡素化することができます。

⑶大Οマークとアルゴリズムの時間性能を表しています。

基本的な文はマグニチュードΟ表記の受注の多数に実行されます。

一定の順序O(1)

どんなに複雑な構造の周期や限り、コード実行の行数など、このコードの時間複雑度はO(1)にあることを、行番号の数を決定するためのコードを実行する、など。

int i = 1;
int j = 2;
++i;
j++;
int m = i + j;
m++

線形順序O(N)

上記の例のように一つのループ次線形コード

int ans = 0for(int i = 1; i <= n; i++)
{
	ans += i;
}

それらの時間複雑度はO(N)です。

オーダーOの(ログN-

コードを見てください

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

各サイクルiについて倍増、N Iよりも大きいX倍を想定した後、その近くなってから、または私は、2 n個等しいXベースに対するnの> N次いで= 2、X =ログ対数
と略記することができる時間の複雑O(ログN-

Oの線形順序(N- *ログのN-

時間計算量はO(LOGN)巡回符号N回、それは、N * O(logN個)の時間複雑で、それはO(nlogN)したいです。

for(m=1; m<n; m++)
{
    i = 1;
    while(i<n)
    {
        i = i * 2;
    }
}

O(N 2)及O(N 3

ネストされたループの2つのまたは3層

使用されるアルゴリズムの時間複雑

ここに画像を挿入説明
なお、
ここに画像を挿入説明

宇宙複雑

アルゴリズム一時メモリ空間は、通常、128メガバイト、タイトルを占有として、空間複雑さが定義されている
空間的複雑さのアルゴリズムは、(1)Oとして表すことができる処理量データを用いてNサイズの変化の変化しない定数である場合。
場合、アルゴリズムの空間の複雑さとN 2、0(10g2n)のように表すことができる塩基の対数に比例した時間、
アルゴリズムの複雑さとの空間的関係は、時間に直線的に比例する、N 0(Nとして表すことができます。 。)パラメータが配列の場合、のみ、送信されたアドレスポインタの引数で、それのために、すなわち機械語空間をメモリ空間を割り当てる必要があり、
パラメータが参照されている場合は、唯一のストレージを割り当てるために必要とされますアドレス空間は、自動的に変数引数にシステムが参照する対応する引数変数のアドレスを格納するためにそれを使用します。

公開された20元の記事 ウォンの賞賛2 ビュー942

おすすめ

転載: blog.csdn.net/zhbbbbbb/article/details/103456136
おすすめ