私のコンピューターサイエンスの教師は、Big Oには上限はあるが下限はないと言っています。ただし、BigOを使用して作成されたアルゴリズムのグラフを見ると、上限はまったくありません。上限は永遠に続きます。では、BigOのコンテキストに上限があるとはどういう意味ですか?
BigOは、簡単に言えば、アルゴリズムの複雑さの尺度です。最良のシナリオでは、最悪のアルゴリズムでも1つの操作/反復で終了する場合があります。ただし、操作が異なれば、平均および最悪の場合の複雑さも異なります。これらの最悪の場合の複雑さは上限と考えることができます。
つまり、どのようにして上限を計算できますか?
アルゴリズムは、処理しているデータのサイズに基づいて異なる実行期間を持ちます。例として、さまざまな方法で実装できる単純なデータ構造を考えてみましょう(配列を使用しましょう)。データの構造を検索することにします。実行する必要がある操作の数は、データのコレクションのサイズに基づきます。構造体にn
要素があると仮定しましょう。
典型的な配列は、最悪の場合、このためにコレクション全体を反復します。つまり、最大n
操作を実行し、O(n)
の複雑さをもたらすため、上限があります。/n
。
データがソートされているとしましょう:バイナリ検索を実行してlog(n)
演算を実行し、上限of O(log(n))
。それでも1つの操作で完了することができ、n
が無限の数に近づくと、複雑さは無限の実行時間に近づきます。これはおそらくあなたがクラスで見ていたものです。アルゴリズムの複雑さが異なると、この無限の実行レベルに異なる速度でアプローチします(n!> n ^ 2> n> log(n)> 1)。
編集:コメントに従って、データ量の変更は、複雑さに基づく実行時間の変更によっても反映されることに注意してください。 O(1)アルゴリズムは変更されません、対数アルゴリズムは対数的に変更されます、線形アルゴリズムは線形などです。基本的に、データの量を2倍にすると、実行時間が2倍にならない場合があります。それ、またはいくつかの小さいまたは大きい要因によってそれを増やします。
より複雑な例では、もちろん複雑さを理解するためにより多くの作業が必要ですが、これは一般的な考え方です。
アルゴリズムの複雑さの上限は、操作で処理されるデータ量の変化に伴うアルゴリズムの実行時間の変化を示します。より複雑なアルゴリズムは、多くの場合、データ量が増えるにつれて実行にますます(多くの場合、線形ではない)長い時間がかかることを意味します。
最悪のケースでは、パフォーマンスに上限が与えられます。アルゴリズムの最悪のケースを分析することで、アルゴリズムが決定したパフォーマンスを下回ることはありません。