シリーズ2のアルゴリズムの複雑さを習得するためのアルゴリズムエントリ(1)

シリーズ2のアルゴリズムの複雑さを習得するためのアルゴリズムエントリ(1)

#杨景文アルゴリズムシリーズ

1.概要

アルゴリズムの複雑さは、時間の複雑さと空間の複雑さに分けられます。このセクションでは、主に時間の複雑さを紹介します。時間の複雑さは、コンピュータがアルゴリズムを実行するのに必要な時間を表します。コンピューターの場合、同じ問題を解決するアルゴリズムが異なり、必要な時間が短いほど、アルゴリズムは優れています(空間の問題は考慮されません)。そのため、時間の複雑さは、アルゴリズムの品質を測定する指標の1つです。

第二に、大きなO記号

「ビッグOシンボル」は通常、時間の複雑さを測定するために使用されます。大きなO記号とは何ですか?最初にいくつかの数学的知識を見る必要があります:関数と限界です。

2.1数学的例:

1.単項2次関数f(x)= 2x ^ 2 + 2x + 2;
2. xが無限大になる傾向がある場合、x—>∞として記述されます。
3. x->∞、f(x)= 2x ^ 2 + 2x + 2 = 2x ^ 2。
上記の3番目の項目では、xが無限の場合、2x ^ 2 + 2x + 2は2x ^ 2にほぼ等しくなり、極限思考(アルゴリズム分析)では2x ^ 2 + 2x + 2 = 2x ^ 2として理解できます。その理由は以下の通りである:
とき、X = 5の場合:
。2X ^ 2 + 2X + 2 = 62である
^ 2 = 50 2X
:X = 500、
2X ^ 2 + 2X + 2 = 501 002
2X ^ 2 = 250000
上記により例として、xの値を増やし続けます。無限大であっても、f(x)関数の2x + 2項は無視できます。したがって、x->∞の場合、(2x ^ 2 + 2x + 2)は(2x ^ 2)、または(2x ^ 2 + 2x + 2)=(2x ^ 2)とほぼ等しくなります。また、極限思考では、2x ^ 2の前の係数2も省略できます。つまり、x->∞の場合、2x ^ 2〜x ^ 2です。
極限のアイデアを通じて、f(x)= 2x ^ 2 + 2x + 2の関数を使用して、残りの項をx ^ 2として省略します。つまり、x->∞の場合、f(x)= 2x ^ 2 + 2x + 2 = x ^ 2です。大きなO記号を使用して、x->無限大、f(x)= O(x ^ 2)を示します。

2.2コンセプト

Big Oは、切り捨てられた無限系列、特に漸近系列の残りの項を特徴付けるために使用されます。大きなO記号は、関数の漸進的な上限を示します。上記の数学的例と同様に、関数f(x)= 2x ^ 2 + 2x + 2累進級数の残りの項はx ^ 2であり、O(x ^ 2)と表されます。つまり、O(x ^ 2)はf(x)の漸進的な上限です。

3.時間の複雑さ

タイトル:1 + 2 + 3 + ... + nの合計を求めます。(ガウスアルゴリズム)

  • ジュニアプログラマーのコード:
… …
    for (int i = 1; i <= n; i++) {
        sum+=i;
    }
… …

分析:
1.上記のコードの合計+ = 1は何回実行されますか?回答:n回。
2. Int i = 1が1回実行されます。
3. i <= nはn + 1回実行されます。(forループの実行順序は、iがnより大きい場合にのみループが停止するため、i = n + 1の場合、i <= nが再度判定されるため、比較してもう一度実行されます)
4. i ++がn回実行されます。
要約すると、上記のコードはn + 1 + n + 1 + n = 3n + 2回実行されます。
極端な考え方を使用する場合、n->∞、3n + 2〜3n〜n、O(n)と表記。O(n)は、上記のコードの時間の複雑さです。

  • 上級プログラマ向けのコード:
… …
(1+n)*n/2
… …

上記のように、同じ計算1がnに追加され、ガウスアルゴリズムははるかに単純になります。上記のコードは、ループなしで1回だけ実行する必要があります。したがって、時間の複雑さはO(1)です。

  • 概要
    O(1)とO(n)は、それがあるとの違いは何ですか?上記の「ジュニアプログラマコード」および「アドバンスプログラマコード」の変数nが増加し続ける場合、ガウスアルゴリズムの時間の複雑さは基本的に変更されず、O(1)になります。しかし、「ジュニアプログラマコード」の時間の複雑さが増します。
    コンピュータの場合、nに1を継続的に追加するためのガウスアルゴリズムの計算速度は、forループの速度よりもはるかに高速です。速度が速いほど、システムのパフォーマンスは向上します。
    ここに画像の説明を挿入

まとめ

1. O(1)とO(n)はどちらも時間の複雑さを表しています。1が1単位時間を表し、nがn単位時間を表すことを簡単に理解してください。
2.コンピュータハードウェアが異なるため、同じアルゴリズムでも時間が異なる場合がありますが、同じアルゴリズムを同じハードウェアコンピュータで実行する場合の時間の複雑さは同じです。特定の1秒や2秒ではなく、「時間」という用語。
3.時間の複雑さの計算に使用される記号と概念には、数学関数と制限の知識が含まれます。クラスメートを忘れた場合は、それを確認できます。

93件の元の記事を公開 115のような 230,000以上を訪問

おすすめ

転載: blog.csdn.net/muyi_amen/article/details/105584125