これからデータ構造の研究に入ります。まず アルゴリズムの良し悪しを決定する時間と空間の複雑さを理解しましょう。
アルゴリズムの品質を測定するにはどうすればよいでしょうか?
そのアルゴリズムの効率を見てみましょう
アルゴリズムの効率
アルゴリズム効率分析は 2 つのタイプに分類されます。1 つ目は時間効率、2 つ目はスペース効率です。時間効率は時間計算量と呼ばれ、空間効率は空間計算量と呼ばれます。 時間計算量は主にアルゴリズムの実行速度を測定します。、空間計算量は主にアルゴリズムの追加スペースの要件を測定します。 , コンピュータ開発の初期には、コンピュータの記憶容量はほとんどありませんでした。そのため、私たちは空間の複雑さを非常に重視しています。しかし、コンピュータ産業の急速な発展により、コンピュータの記憶容量は非常に高いレベルに達しました。したがって、アルゴリズムの空間の複雑さに特別な注意を払う必要はなくなりました。
時間の複雑さ
時間計算量の定義: コンピュータ サイエンスでは、アルゴリズムの時間計算量は、実行時間のアルゴリズムを定量的に記述する数学関数です。 。アルゴリズムの実行にかかる時間は理論的に計算することはできず、プログラムをマシンに入れて実行する場合にのみ知ることができます。しかし、コンピューター上ですべてのアルゴリズムをテストする必要があるでしょうか?全てをコンピュータ上でテストすることも可能ですが、非常に面倒なので、時間計算量解析手法を導入します。 アルゴリズムにかかる時間は、そのステートメントの実行回数に比例します。アルゴリズム内の基本演算の実行回数がアルゴリズムの時間計算量となります。
ビッグオー漸近記法
実際、時間計算量を計算するときは、正確な実行数を計算する必要はなく、おおよその実行数のみを計算する必要があるため、ここでは Big O の漸近表現を使用します。
Func によって実行される基本操作の数:
F(N)=N^2+2N+10
しかし、N が無限に大きい場合はどうなるでしょうか?
N=10 F(N) = 130
N=100 F(N) =10210
N=1000 F(N)=1002010
したがって、次の結論が得られます。
1. 実行時のすべての加法定数を定数 1 に置き換えます。 F(N)=N^2+2N+10
2. 修正された実行時間関数では、最高次項のみが保持されます。 F(N)=N^2
3. 最上位の項が存在し、1 でない場合は、この項に乗じた定数を削除します。結果はビッグオーオーダー。F(N) = 3N^2 の場合
その場合、3 は省略されます F(N) = N^2
つまり、ビッグオーは O(N^2) です
さらに、一部のアルゴリズムの時間計算量には最良のケース、平均的なケース、最悪のケースがあります。
最悪のケース: 任意の入力サイズに対する最大実行数 (上限)< /span> 最良のケース: 任意の入力サイズでの最小実行数 (下限)
平均的なケース: 任意の入力サイズでの予想実行数例:長さ N の配列でデータ x を検索する
最良のケース: 1 回検出されました
最悪のケース: N 回検出されました
平均ケース: N/2 回検出されました
実際には、アルゴリズムの最悪の動作状況に一般的に焦点が当てられるため、配列内のデータ検索の時間計算量は O(N) になります。
一般的な時間計算量の計算例
F(N) = 2N+10
式によれば、F(N)=N;
つまりO(N)です
MもNも未知数です
F(N)=M+N;
つまり O(M+N) です
F(N)=100;
したがって、F(N)=1;
したがって、それは O(1) です。
最良のシナリオと最悪のシナリオがあります。通常は最悪のシナリオのみを考慮します
二分探索の時間計算量は O(logN)
通常の状況では、再帰の時間計算量は、再帰の回数 * 各再帰が実行される回数です。
このフィボナッチ再帰には描画分析が必要です
つまり、Big O は O(2^N) です
空間の複雑さ
スペースの複雑さは、アルゴリズムの動作中に一時的に占有されるストレージ スペースの量の尺度です 。スペース複雑度は、プログラムが占めるスペースのバイト数ではありません。これはあまり意味がないため、スペース複雑度は変数の数によって計算されます。空間計算量の計算ルールは基本的に時間計算量と同様であり、 ビッグ O 漸近表記法も使用します。
空間複雑度は O(1)
他の配列が要求されなかったため、元の配列のみが使用されました。
時間計算量は O(N)
別の配列が適用されているため、
再帰呼び出しが N 回行われ、N 個のスタック フレームが開かれ、各スタック フレームは一定量のスペースを使用します。空間の複雑さは O(N)