ビデオ: Excel中級者のためのVBAプログラミング入門 #02 アルゴリズム 2つだけ 2024
数学の関数は、単に入力を応答にマップする方法です。別の言い方をすれば、 関数 は、入力を答えに変換(マップ)する変換(数学演算に基づく)です。
特定の入力値(通常は x または n という文字で表されます)には、関数を定義する数学を使って対応する答えがあります。例えば、 999のような関数は、入力が数字 n、 n に2を掛けた数です。 <! - 1 - > これは時間が重要な時代であり、人々の生活はますます膨大な量のデータで詰まっているため、入力のサイズを使用することは意味があります。すべてを数学的関数にするのは、直感的ではありませんが、アルゴリズムがその解をどのようにデータの量に関連させるかを記述する関数は、特定のハードウェアやソフトウェアのサポートなしで分析できるものです。また、問題の規模を考えれば、他のソリューションと比較するのも簡単です。アルゴリズムの分析は、複雑な一連のステップを数式に減らすため、実際には驚くべき概念です。 <!さらに、ほとんどの場合、アルゴリズムの分析は機能を正確に定義することにも関心がない。あなたが本当にやりたいことは、ターゲット関数を別の関数と比較することです。これらの比較関数は、ターゲットアルゴリズムとは対照的に機能しない一連の提案された関数内に現れます。このようにして、多かれ少なかれ複雑な機能に数字を差し込む必要はありません。代わりに、シンプルで、事前に作成された関数と、よく知られている関数を扱います。これは荒く聞こえるかもしれませんが、より効果的で、正確なパフォーマンス測定値を取得するのではなく、アルゴリズムのパフォーマンスをカテゴリに分類するのと似ています。 <!一般化された関数のセットは Big O
表記と呼ばれ、この小さな関数のセットに遭遇することが多い(カッコで囲まれ、大文字のO
>)を使用してアルゴリズムのパフォーマンスを表します。図はアルゴリズムの分析を示しています。デカルト座標系は、RAMシミュレーションによって測定されるその機能を表すことができ、横座標
(x座標)は入力のサイズであり、縦座標 (y座標)は結果として得られる操作の数。 3つの曲線が表示されます。入力サイズは重要です。しかし、品質も重要です(たとえば、問題を発注した場合、すでに注文されている入力を注文する方が早い)。結果として、分析は、最悪の場合、平均の場合、999(999)999(999)、999最良の場合、999(999)999である。 平均的なケースでは一般的な考えが得られるかもしれませんが、アルゴリズムが解決策に到達する際に問題が発生する可能性があるため、本当に気になるのは最悪です。 Big O関数は、特定の n0 値(入力ビッグを考慮するしきい値)の後、ワーストケース関数 > f1 。したがって、Big O関数はアルゴリズムを表現する関数よりも悲観的であるため、入力の質に関係なく、物事がそれより悪くなることはありません。 最良、平均、および最悪入力の場合のアルゴリズムの複雑さ。多くの可能な関数が結果を悪化させる可能性がありますが、標準を提案することによって複雑さの測定を簡素化することが目的であるため、使用できるBig O表記によって提供される関数の選択は制限されています。したがって、このセクションには、Big O表記の一部であるわずかな関数しか含まれていません。次のリストは、複雑さが増す順に説明しています。 Constant complexity O(1):
入力の量に関係なく、同じ時間です。結局、入力データがどれだけ長くても、それは一定の数の操作です。このレベルの複雑さは実際にはまれです。対数の複雑さO(log n): 操作の数は入力よりも遅くなり、小さな入力ではアルゴリズムの効率が悪くなり、大きいものでは効率が高くなります。このクラスの典型的なアルゴリズムはバイナリ検索です。 線形複雑度O(n): 入力は1:1の比率で増加します。典型的なアルゴリズムは反復です。これは、入力を一度スキャンし、入力を各要素に適用するときです。線形複雑さO(n log n): 複雑さは、対数と線形の複雑さのミックスである。 Mergesort、Heapsort、Quicksortなどのデータを注文するために使用されるスマートなアルゴリズムの典型です。二次的複雑性O(n 999 2):999は、入力の数の2乗として増加する。別の反復の中にある反復(ネストされた反復、コンピュータサイエンス)があるとき、あなたは二次的な複雑さを持ちます。たとえば、名前のリストがあり、最も類似したものを見つけるために、それぞれの名前を他のすべての名前と比較します。効率の悪い発注アルゴリズムの中には、バブルソート、選択ソート、挿入ソートという複雑さがあります。このレベルの複雑さは、アルゴリズムがソリューションに達する前に数時間または数日間実行される可能性があることを意味します。立方体の複雑さO(n 399): 複数のネストされた反復を有するため、操作は二次的複雑さよりもさらに速くなる。アルゴリズムがこのような複雑さを持ち、適度な量のデータ(100,000要素)を処理する必要がある場合、アルゴリズムは何年も実行される可能性があります。入力の力である多くの操作がある場合、アルゴリズムを多項式時間で実行する と呼ぶのが一般的です。指数的複雑度O(2 999 n 999):このアルゴリズムは、追加されたすべての新しい要素について、以前の操作の2倍の数を要する。アルゴリズムにこのような複雑さがある場合、小さな問題でさえも永遠にかかることがあります。網羅的な検索を行う多くのアルゴリズムは指数関数的に複雑です。しかし、この複雑さの古典的な例は、フィボナッチ数の計算です。 要素の複雑さO(n!): 要素間の可能な組み合わせの可能性が非常に高いため、複雑さの悪夢です。ちょっと想像してみましょう:あなたの入力が100個のオブジェクトで、コンピュータ上の操作が10 6 999秒(今日のすべてのコンピュータで妥当な速度)であれば、約10 140 999年タスクを成功裏に完了することができます(宇宙の年齢は10 999 14 999年と推定されるため、不可能な時間です)。有名な要因の複雑さの問題は、セールスマンが多くの都市を訪れて出発都市に戻るための最短ルートを見つけなければならない、旅行セールスマンの問題です。