アルゴリズムが当てはまる複雑さの範囲について理解を深めたいと思います。私のように、アルゴリズムがどのように定式化され、どのように分解されるかを理解しようとする人にとっては、興味深く、役立つと思います。
説明付きの基本アルゴリズム、説明付きの中間アルゴリズム、および説明付き(またはなし)のエキスパートレベルのアルゴリズムを提供できますか?
Programmer Competency Matrix: から
初心者
基本 ソート 、 検索 および データ構造トラバーサル および検索アルゴリズム
中級
ツリー および グラフ データ構造、単純な 貪欲 および 分割統治 アルゴリズム。
上級
グラフアルゴリズム 、 数値計算アルゴリズム など.
初心者
バイナリ検索 :ソートされた配列内のアイテムの位置を特定します。
AVLツリーの挿入 :サブツリーのバランスプロパティを維持しながら、AVLツリーにアイテムを挿入します。
深さ優先検索 、 幅優先検索 :DFSまたはBFSの順序でグラフのノードをウォークスルーします。
中級
Dijkstraのアルゴリズム :非負のエッジパスコストを持つグラフの単一ソースの最短パス問題を解決し、最短パスツリーを生成するグラフ検索アルゴリズム。
最長共通サブシーケンス :シーケンスのセット(多くの場合2つのみ)内のすべてのシーケンスに共通する最長サブシーケンスを見つけます。
凸包(グラハムスキャン) :ポイントのセットを指定して、凸多角形でカバーするこれらのポイントの最小サブセットを見つけます。
Counting Sort :O(n)の連続した整数のソートアルゴリズム。
詳細
Range Minimu Query :n個の順序付けされたオブジェクト(数値など)の配列A [1、n]を指定すると、iからjまでの範囲最小クエリ(またはRMQ)が最小要素の位置を要求しますサブ配列A [i、j]内。 RMQは 最も低い共通祖先 問題を解決するために使用できます。
さらにいくつかの例
初心者: リンクリストの反転 、 Mergesort 、 エラトステネスのふるい 、 赤黒木アルゴリズム (挿入と削除)
中級: シンプレックス 、 ミラーラビン素数検定 、 ハフマン符号化 、 クラスカルのアルゴリズム
高度: ビタビアルゴリズム 、 クーリー–テューキーFFT 、 シミュレーションされたアニーリング 、 ヒンドリー–ミルナー型推論
私は、少なくともいくつかの疑似コードおよび/または良い説明があるリンクを見つけようとしました。しかし、高度なアルゴリズムについてのことは、それらが多くのバリエーションを持っているということです。したがって、「遺伝的アルゴリズム」の基本的な概要を説明することができますが、実際には、その名前で呼ばれるアルゴリズムは多数あります。 (FFTについても同様です。名前付きのバリアントをリンクしました)
数値積分に関するこのテキスト は、ゲームの視聴者向けに、数値積分の2つのアルゴリズムについて説明しています。より単純で単純なアルゴリズム(オイラー積分)と、より高度なアルゴリズム(ルンゲクッタ次数4積分)です。 。 「ベーシックvs.アドバンスド」を見るには良いかもしれません。物理学をシミュレートするためにインテグレーターを使用でき、オイラーインテグレーターは非常に大きなエラーを引き起こすため、代わりにRK4を推奨します。しかし、それらは間違いなく「同じ」アルゴリズムのバリエーションです。オイラーは1次RKです。