1.2アルゴリズムとアルゴリズム評価(時間計算量と空間計算量)

1.アルゴリズムの基本概念

アルゴリズムは、特定の問題を解決するためのステップの記述です。これは、命令の有限シーケンスであり、各命令は1つ以上の操作を表します。

アルゴリズムの特徴:

1.有限性:アルゴリズムは常に有限のステップを実行した後に終了する必要があり、各ステップは有限の時間で完了することができます。
2.決定論的:アルゴリズムの各命令は明確な意味を持っている必要があり、同じ入力に対して同じ出力のみを取得できます。
3.実現可能性:アルゴリズムで説明されている操作はすべて、実装されている限られた数の基本的な操作を実行することで実装できます。
4.入力:アルゴリズムには、特定のオブジェクトのセットから取得された0個以上の入力があります。
5.出力:アルゴリズムには1つ以上の出力があります。これは、入力と特定の関係がある量です。

優れたアルゴリズムが達成するもの:

正しさ:アルゴリズムは問題を正しく解決できる必要があります。
読みやすさ:アルゴリズムは、人々が理解しやすいように読みやすくする必要があります。
堅牢性:不正なデータが入力された場合、アルゴリズムは不可解な出力結果を生成することなく、適切に反応または処理できます。
効率と低ストレージ要件:効率とはアルゴリズムの実行にかかる時間を指し、ストレージ要件とはアルゴリズムの実行中に必要な最大ストレージスペースを指します。どちらも問題のサイズに関連しています。

2.アルゴリズム効率の測定

アルゴリズムの効率は、時間の複雑さと空間の複雑さによって表されます

2.1アルゴリズムの時間計算量

時間計算量はプログラムの実行時間を比較しますか?

いいえ、ハードウェアの違いは時差につながる可能性があるため、今日のコンピューターでは、10年前のコンピューターの良いプログラムよりも悪いプログラムの実行時間が短くなる可能性があります。したがって、比較なしではそれほど時代を超越することはありません。ステートメントが実行された回数で比較する方がはるかに公平です。

一般に、アルゴリズムの基本操作の繰り返し回数は、問題サイズnの関数f(n)であり、アルゴリズムの時間測定はT(n)= O(f(n))として表されます。これは、問題のサイズがnの場合、アルゴリズム実行時間の増加率は、アルゴリズムの漸近時間計算量、または略して時間計算量と呼ばれるf(n)の増加率と同じであることを意味します。

例:入力パラメーターはn、ステートメントの数はf(n)、複雑さはO(f(n))、O()関数は高次項と低次の係数を削除する関数です。 -注文条件

int count=0;

時間計算量はO(0)です

int n=8, count=0;

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

時間計算量はO(n)です

2.2アルゴリズムのスペースの複雑さ

スペースの複雑さは、プログラム(実行可能ファイル)のサイズを考慮していますか?

スペースの複雑さは、実行可能ファイルのサイズではなく、プログラムの実行時にプログラムが占有するメモリのサイズを考慮することです。ただし、実行時にプログラムが占有するメモリを計算することは正確ではありません。コンパイラのメモリアライメント、プログラミング言語コンテナの基盤となる実装など、プログラムの実際のメモリ使用量には多くの要因が影響します。 。、これはプログラムメモリのオーバーヘッドに影響します。したがって、スペースの複雑さは、プログラムのメモリ使用量のサイズを事前に概算することです。

アルゴリズムのスペースの複雑さS(n)は、アルゴリズムによって消費されるストレージスペースとして定義され、問題のサイズnの関数です。S(n)= O(g(n))と表記します。

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

最初のコードでは、nを変更しても、開かれるメモリスペースは、nを変更しても変化しないことがわかります。つまり、
このアルゴリズムのスペースの複雑さは一定であるため、次のように表されます。大きなO(1)

int* a = new int(n);
for (int i = 0; i < n; i++) {
    
    
    a[i] = i;
} 

新しい配列を作成しました。このデータのサイズはnです
。forループはありますが、新しいスペースは割り当てられません。したがって、このコードのスペースの複雑さは主に最初の行に依存し、
nとともに増加する可能性があります。開かれたメモリのサイズは直線的に増加します。つまり、O(n)

おすすめ

転載: blog.csdn.net/m0_50991874/article/details/123292693