ベストアンサー
目的による分類
各アルゴリズムには目標があります。たとえば、クイックソートアルゴリズムの目的は、データを昇順または降順で並べ替えることです。ただし、目標の数は無限であり、目的の種類ごとにグループ化する必要があります。
実装による分類
アルゴリズムは、さまざまな基本原則に従って実装できます。
- 再帰的または iterative 再帰的アルゴリズムは、特定の条件が一致するまで自分自身を繰り返し呼び出すアルゴリズムです。関数型プログラミングに共通の方法です。反復アルゴリズムは、ループのような反復構造を使用します。一部の問題は、いずれかの実装に適しています。たとえば、ハノイの塔の問題は、再帰的な実装でよく理解されています。すべての再帰バージョンには、同等の反復反復があり、その逆も同様です。
- 論理または procedural アルゴリズムは、制御された論理的推論と見なすことができます。論理コンポーネントは、計算で使用できる公理を表し、制御コンポーネントは、公理に控除を適用する方法を決定します。これが論理プログラミングの基礎です。純粋な論理プログラミング言語では、制御コンポーネントは固定されており、アルゴリズムはロジックコンポーネントのみを提供することによって指定されます。
- シリアルまたは並列アルゴリズムは通常、コンピューターが一度に1つのアルゴリズム命令を実行することを前提として説明されています。これは、コンピュータアーキテクチャを利用して複数の命令を一度に処理する並列アルゴリズムとは対照的に、シリアルアルゴリズムです。それらは問題をサブ問題に分割し、それらをいくつかのプロセッサに渡します。反復アルゴリズムは一般的に並列化可能です。並べ替えアルゴリズムは効率的に並列化できます。
- 決定論的または非決定論的決定論的アルゴリズムは事前定義されたプロセスで問題を解決しますが、非決定論的アルゴリズムはヒューリスティックを使用して各ステップで最適なソリューションの推測を実行する必要があります。
設計パラダイムによる分類
設計パラダイムは、専用の種類のアルゴリズムを必要とする研究または問題のクラスのドメインです。
- 分割統治分割統治アルゴリズムは、インスタンスが十分に小さくなるまで、問題のインスタンスを同じ問題の1つ以上の小さなインスタンスに繰り返し(通常は再帰的に)削減します。簡単に解決します。分割統治のそのような例の1つは、マージソートです。データをセグメントに分割した後、データの各セグメントでソートを実行でき、データ全体のソートは、それらをマージすることにより、征服フェーズで取得できます。二分探索アルゴリズムは、縮小統治アルゴリズムと呼ばれる分割統治の変形の例であり、同一のサブ問題を解決し、このサブ問題の解決策を使用して解決します。より大きな問題。
- 動的計画法加重グラフの最短経路は、隣接するすべての場所からゴールまでの最短経路を使用して見つけることができます。頂点。問題の最適解をサブ問題の最適解から構築できる場合、動的計画法を使用すると、すでに計算された解の再計算を回避できます。 -「分割統治」アプローチとの主な違いは、分割統治法ではサブ問題が独立しているのに対し、動的計画法ではサブ問題の重なりが発生することです。 -動的計画法とメモ化は一緒に行われます。単純な再帰との違いは、再帰呼び出しのキャッシュまたはメモ化にあります。サブ問題が独立している場合、これは役に立ちません。メモ化を使用するか、すでに解決されたサブ問題のテーブルを維持することにより、動的計画法は、多くの問題の指数関数的性質を多項式の複雑さに減らします。
- 欲張り法欲張りアルゴリズムは動的計画法アルゴリズムに似ていますが、違いは、サブ問題の解決策を各段階で知る必要がないことです。代わりに、現時点で最良の解決策に見えるものから「貪欲」な選択を行うことができます。最も人気のある欲張りアルゴリズムは、クラスカルによって与えられた最小全域木を見つけることです。
- 線形計画法問題は線形のセットとして表されます不等式が発生すると、入力を最大化または最小化しようとします。これにより、特にシンプレックスアルゴリズムを使用することで、有向グラフの最大フローなどの多くの問題を解決できます。線形計画法の複雑な変形は整数計画法と呼ばれ、解空間はすべての整数に制限されます。
- 削減は