ホームページ >バックエンド開発 >PHPチュートリアル >アルゴリズムの時間の複雑さ
プログラマーまたはWeb開発者として、データの検索、配列のソート、パスファインディングなど、さまざまなタスクのアルゴリズムを作成した可能性があります。 正確性は最重要です。すべての入力(この議論を超えたトピック)で予想どおりに機能するようにします。 効率も同様に重要です。入力サイズの計算時間スケールはどのようにしていますか? この記事では、アルゴリズムの効率の重要な側面である時間の複雑さについて説明します。 キーテイクアウト:
ビッグO表記は、アルゴリズムのランタイムと入力サイズの関係を定量化します。 ソートや再帰などの計算的に集中的なタスクに特に関連しています。
効率的なアルゴリズムは、ランタイムを最小限に抑え、より低い時間の複雑さを誇っています。バイナリ検索(O(log n))は、Bogosort(O(n*n!))などの非効率的なアルゴリズムとは対照的に効率を例示しています。Big O Notation:
ビッグO表記は、アルゴリズムのスケーリング係数の上限を数学的に表します。 たとえば、入力を2倍にすると実行時間が2倍になると、複雑さはO(n)(線形)です。 説明しましょう:ランタイムが配列のサイズ(n)と直線的にスケーリングするため、これにはO(n)の複雑さがあります。 ここで、ネストされたループを検討してください:
ここでは、内側のループが外側ループの反復ごとにn回実行されるため、複雑さはo(n²)です。 Big Oは、入力サイズが無限に近づくにつれて、支配的な用語に焦点を当てています。 o(n²n)はo(n²)。
に簡素化されます 効率的なアルゴリズム:<code class="language-php">$numbers = array(14,82,4,0,24,28); foreach($numbers as $number) { echo $number; }</code>
効率的なアルゴリズムは、低時間の複雑さを示します。 o(log n)の複雑さを備えたバイナリ検索は、主要な例です。 検索スペースを繰り返し半分にし、線形スキャン(O(n))よりも大幅に高速な検索を実現します。
<code class="language-php">$numbers = array(14,82,4,0,24,28); foreach($numbers as $number1) { foreach($numbers as $number2) { // ... some operation ... } }</code>
非効率的なアルゴリズム:
逆に、非効率的なアルゴリズムは時間の複雑さが高くなっています。有名な非効率的なソートアルゴリズムであるBogosortは、ソートされるまで入力を繰り返しシャッフルします。そのo(n*n!)の複雑さにより、合理的なサイズの入力に対しては非現実的です。 対照的に、Heapsortはソートのためのはるかに効率的なソリューションを提供します。 アルゴリズムの設計と最適化: 時間の複雑さの最適化を説明しましょう。 昇順で一連の正の整数を並べ替える機能を検討してください。 単純な挿入ソート(O(n²))は次のように実装できます。
時間の効率のために努力することが重要ですが、それは唯一の焦点であってはなりません。 小さなデータセットの場合、アルゴリズム間のランタイム差はごくわずかです。 さらに、ソートや検索などの一般的なタスクでは、多くの効率的で十分にテストされたアルゴリズムがすぐに利用できます。
よくある質問(FAQ):<code class="language-php">$numbers = array(14,82,4,0,24,28);
foreach($numbers as $number) {
echo $number;
}</code>
機能しますが、O(n²)は大きなアレイでは非効率的です。カウントソート(o(n))は、優れた代替品を提供します:<code class="language-php">$numbers = array(14,82,4,0,24,28);
foreach($numbers as $number1) {
foreach($numbers as $number2) {
// ... some operation ...
}
}</code>
カウントソートは、要素の周波数を追跡するためにカウント配列を活用することにより、線形時間の複雑さを実現します。 ただし、ソートの適合性をカウントすることは、入力値の範囲に依存することに注意してください。
時間の複雑さはすべてではありません:
以上がアルゴリズムの時間の複雑さの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。