他のコードがクロールしているのに、なぜ一部のコードが非常に高速に実行されるのか疑問に思ったことはありますか? Big O Notation を入力してください。開発者がアルゴリズムの効率性を議論するために使用する秘密の言語です。簡単に説明してみましょう。
Big O Notation は、入力サイズの増加に応じてコードのパフォーマンスがどのように拡張されるかを説明します。これは、実行する作業を増やしたときに、コードにどれだけ時間がかかるかを測定するものだと考えてください。
パフォーマンスの聖杯。入力がどれほど大きくなっても、操作には同じ時間がかかります。
function getFirstElement(array) { return array[0]; // Always one operation }
通常、問題を毎回半分に分割するアルゴリズムで見られます。二分探索は典型的な例です。
function binarySearch(sortedArray, target) { let left = 0; let right = sortedArray.length - 1; while (left <= right) { let mid = Math.floor((left + right) / 2); if (sortedArray[mid] === target) return mid; if (sortedArray[mid] < target) left = mid + 1; else right = mid - 1; } return -1; }
パフォーマンスは入力サイズに比例して増加します。各要素を一度調べる必要があるアルゴリズムで一般的です。
function findMax(array) { let max = array[0]; for (let i = 1; i < array.length; i++) { if (array[i] > max) max = array[i]; } return max; }
マージソートやクイックソートなどの効率的な並べ替えアルゴリズムでよく見られます。
function mergeSort(array) { if (array.length <= 1) return array; const mid = Math.floor(array.length / 2); const left = mergeSort(array.slice(0, mid)); const right = mergeSort(array.slice(mid)); return merge(left, right); }
ネストされたループで一般的です。入力サイズが大きくなると、パフォーマンスが急速に低下します。
function bubbleSort(array) { for (let i = 0; i < array.length; i++) { for (let j = 0; j < array.length - i - 1; j++) { if (array[j] > array[j + 1]) { [array[j], array[j + 1]] = [array[j + 1], array[j]]; } } } return array; }
可能な限りネストされたループを避ける
適切なデータ構造を選択してください
空間と時間のトレードオフ
// Looks like O(n), actually O(n²) array.forEach(item => { const index = anotherArray.indexOf(item); // indexOf is O(n) });
// Poor performance let result = ''; for (let i = 0; i < n; i++) { result += someString; // Creates new string each time } // Better approach const parts = []; for (let i = 0; i < n; i++) { parts.push(someString); } const result = parts.join('');
Big O を理解すると、次のことが役立ちます。
Big O Notation は学術的に見えるかもしれませんが、より良いコードを書くための実用的なツールです。これらの基本から始めれば、より効率的なアルゴリズムを作成できるようになります。
アルゴリズムの最適化に関する経験は何ですか?以下のコメント欄でご意見やご質問を共有してください!
以上が初心者のための Big O Notation: 実践ガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。