ホームページ >ウェブフロントエンド >jsチュートリアル >Big O Notation: シンプルなガイド
ビッグ O 記法は、入力サイズが増大するにつれて時間と空間の観点からアルゴリズムのパフォーマンスや複雑さを記述するために使用される数学的概念です。これは、入力が大きくなるとアルゴリズムの実行時間がどのように増加するかを理解するのに役立ち、さまざまなアルゴリズムのより標準化された比較が可能になります。
アルゴリズムを比較する場合、実行時間だけに依存すると誤解を招く可能性があります。たとえば、あるアルゴリズムでは大規模なデータセットを 1 時間で処理する場合もあれば、別のアルゴリズムでは 4 時間かかる場合もあります。ただし、実行時間はマシンやその他の実行中のプロセスによって異なる場合があります。代わりに、Big O Notation を使用して実行された操作の数に焦点を当て、より一貫した効率の尺度を提供します。
1 から n までのすべての数値の合計を計算する 2 つの方法を見てみましょう:
function addUpTo(n) { let total = 0; for (let i = 1; i <= n; i++) { total += i; } return total; }
function addUpTo(n) { return n * (n + 1) / 2; }
オプション 1 では、n が 100 の場合、ループは 100 回実行されます。対照的に、オプション 2 では、常に一定数の演算 (乗算、加算、除算) が実行されます。したがって:
オプション 2 には 3 つの演算 (乗算、加算、除算) が含まれますが、Big O 分析の一般的な傾向に焦点を当てます。したがって、O(3n) として表現する代わりに、O(n) に簡略化します。同様に、O(n 10) は O(n) に簡略化され、O(n^2 5n 8) は O(n^2) に簡略化されます。 Big O Notation では、最上位の項がパフォーマンスに最も大きな影響を与える最悪のシナリオを考慮します。
O(log n) で表される対数時間計算量など、上記の一般的な計算量以外の表記形式もあります。
Big O Notation を使用すると、入力サイズに基づいてアルゴリズムの実行時間の増加を形式化できます。特定の操作数に焦点を当てるのではなく、アルゴリズムを次のようなより広範なクラスに分類します。
0 から n までの数値のすべてのペアを出力する次の関数を考えてみましょう。
function addUpTo(n) { let total = 0; for (let i = 1; i <= n; i++) { total += i; } return total; }
この場合、関数には 2 つのネストされたループがあるため、nnn が増加すると、演算数は二次関数的に増加します。 n= 2 の場合は 4 つの演算があり、n=3 の場合は 9 つの演算があり、O(n^2) になります。
function addUpTo(n) { return n * (n + 1) / 2; }
一見すると、2 つのループが含まれているため、これは O(n^2) であると思われるかもしれません。ただし、両方のループは独立して実行され、n に応じて線形にスケールします。したがって、全体的な時間計算量は O(n) です。
コードの複雑さのあらゆる側面を分析することは複雑になる可能性がありますが、いくつかの一般的なルールによって物事を簡素化できます。
ここでは時間計算量に焦点を当ててきましたが、Big O を使用して空間 (メモリ) 計算量を計算することもできます。計算に入力サイズを含める人もいますが、多くの場合、アルゴリズムに必要な空間だけに焦点を当てたほうが便利です。それ自体。
例
function printAllPairs(n) { for (var i = 0; i < n; i++) { for (var j = 0; j < n; j++) { console.log(i, j); } } }
この関数では、入力サイズに関係なく一定量の空間 (2 つの変数) を使用するため、空間複雑度は O(1) です。
新しい配列を作成する関数の場合:
function countUpAndDown(n) { console.log("Going up!"); for (var i = 0; i < n; i++) { console.log(i); } console.log("At the top!\nGoing down..."); for (var j = n - 1; j >= 0; j--) { console.log(j); } console.log("Back down. Bye!"); }
ここでは、入力配列のサイズに応じて増加する新しい配列にスペースを割り当てるため、スペースの複雑さは O(n) です。
Big O Notation は、ハードウェアや特定の実装の詳細に依存しない方法でアルゴリズムの効率を分析するためのフレームワークを提供します。これらの概念を理解することは、特にデータ サイズが大きくなる場合に、効率的なコードを開発するために重要です。パフォーマンスがどのように拡張されるかに焦点を当てることで、開発者はアプリケーションでどのアルゴリズムを使用するかについて情報に基づいた選択を行うことができます。
以上がBig O Notation: シンプルなガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。