ここで、漸近解析により、入力のサイズが無限大になるときのアルゴリズムの動作を意味すると仮定します。
漸近解析を使用する理由は、実際にアルゴリズムの動作を予測するのに役立つため
です。予測を使用すると、たとえば、使用すべき問題に対して異なるアルゴリズムがある場合に、決定を下すことができますか?(有用であることは、常に正しいということではありません。)
現実世界の単純化されたモデルについても同じ質問をすることができます。なぜ現実世界の単純化された数学モデルを使用するのですか?
物理学について考えてください。古典的なニュートン物理学は、現実世界の予測において相対論的物理学ほど良くありません。しかし、それは車、高層ビル、潜水艦、飛行機、橋などを構築するのに十分なモデルです。例えば、衛星を構築したり、宇宙探査機をPl王星に送信したり、動きを予測したりする場合星や惑星のような巨大な天体や、電子のような非常に高速の天体。
モデルの限界を知ることは重要です。
通常、これは実世界の十分な近似値です。
実際には、より良い漸近解析を備えたアルゴリズムが実際にうまく機能することがよくあります。アルゴリズムの漸近的挙動が優れていることはめったにないため、入力が十分に大きくなる場合は、通常、アルゴリズムの挙動の最初の予測として漸近的解析に頼ることができます。入力が小さくなることがわかっている場合はそうではありません。必要なパフォーマンスに応じて、より慎重な分析を行う必要がある場合があります。たとえば、入力の分布に関する情報がある場合、アルゴリズムが提供されます。目標を達成するためにより慎重な分析を行うことができます入力の%)。ポイントは、最初のステップとして、漸近解析が開始点として適しています。実際には、パフォーマンステストも行う必要がありますが、それにも問題があることに留意してください。
AAAより良い漸近的な複雑さを持ちます。すべての入力において、どれも他より優れているものは何ですか?それからそれはよりトリッキーになり、私たちが気にするものに依存します。大きな入力または小さな入力を気にしますか?大きな入力を気にする場合、アルゴリズムの漸近的複雑性は向上しますが、気になる大きな入力では最悪の動作をすることは一般的ではありません。小さな入力をもっと気にかけている場合、漸近解析はそれほど有用ではないかもしれません。気になる入力のアルゴリズムの実行時間を比較する必要があります。実際には、複雑な要件を持つ複雑なタスクの場合、漸近解析はそれほど有用ではない場合があります。アルゴリズムの教科書で扱っている簡単な基本的な問題については、非常に便利です。
簡単に言えば、漸近的複雑度は、単純な基本タスク(アルゴリズムの教科書の問題)のアルゴリズムの実際の複雑度の計算が比較的簡単です。より複雑なプログラムを構築するにつれて、パフォーマンス要件が変化し、より複雑になり、漸近解析はそれほど有用ではない場合があります。
アルゴリズムのパフォーマンスを予測し、それらを比較するために、漸近解析を他のアプローチと比較するとよいでしょう。一般的なアプローチの1つは、ランダムまたはベンチマーク入力に対するパフォーマンステストです。漸近的複雑性の計算が困難または実行不可能な場合、たとえば、SAT解法のようなヒューリスティックを使用している場合は一般的です。別のケースは、要件がより複雑な場合です。たとえば、プログラムのパフォーマンスが外部要因に依存し、私たちの目標は、一定の制限時間内に終了するもの(たとえば、ユーザーに表示されるインターフェイスの更新について)入力。
ただし、パフォーマンス分析にも問題があることに注意してください。アルゴリズムに与えられるすべての入力でパフォーマンステストを実際に実行する(より多くの場合、計算的に実行不可能である)場合のパフォーマンスに関する数学的な被授与者を提供しません(そして、いくつかの入力が決して与えられないことを決定することはしばしば不可能です)。我々はランダムなサンプルや私たちが暗黙的にされているベンチマークに対してのテストをした場合と仮定すると、いくつかの規則性
アルゴリズムの性能については、すなわちアルゴリズムは、パフォーマンステストの一部ではない他の入力にも同様に行います。
パフォーマンステストの2番目の問題は、テスト環境に依存することです。つまり、プログラムのパフォーマンスは入力だけで決定されるのではなく、外部要因(マシンの種類、オペレーティングシステム、コーディングされたアルゴリズムの効率、CPUの使用率、メモリアクセス時間など)によって決まります。同じマシンでのテスト。繰り返しますが、パフォーマンステストが実行される特定の環境は、プログラムを実行するすべての環境でパフォーマンステストを実行しない限り、実際の環境と同様であると想定しています10年後にアルゴリズムがオンになりますか?)。
Θ(nlgn)Θ(n2)Θ(lgn)O(n)