Python-data-structure-python-algorithm-classes
Python-アルゴリズムクラス
アルゴリズムは明確なステップであり、0個以上の入力を処理することにより、明確な出力が得られます。 これは、アルゴリズムの設計と作成において多くのアプローチにつながります。 ほとんどのアルゴリズムは、次のカテゴリに分類できることが確認されています。
貪欲なアルゴリズム
貪欲なアルゴリズムは、ローカライズされた最適なソリューションを見つけようとしますが、最終的にはグローバルに最適化されたソリューションにつながる可能性があります。 ただし、一般的に貪欲なアルゴリズムは、グローバルに最適化されたソリューションを提供しません。
そのため、貪欲なアルゴリズムは、それが将来のステップにどのように影響するかを考慮することなく、その時点で簡単なソリューションを探します。 これは、提供された入力の完全な詳細を調べずに人間が問題を解決する方法に似ています。
ほとんどのネットワークアルゴリズムは、貪欲なアプローチを使用します。 ここにそれらのいくつかのリストがあります-
- 巡回セールスマン問題
- プリムの最小スパニングツリーアルゴリズム
- クラスカルの最小スパニングツリーアルゴリズム
- ダイクストラの最小スパニングツリーアルゴリズム
分割統治
このクラスのアルゴリズムでは、与えられた問題をより小さなサブ問題に分割し、各サブ問題を個別に解決します。 問題をさらに細分化できない場合は、解決策を各副問題にマージして、より大きな問題の解決策に到達します。
分割統治アルゴリズムの重要な例は次のとおりです-
- ソートのマージ
- クイックソート
- クラスカルの最小スパニングツリーアルゴリズム
- バイナリ検索
動的計画法
動的プログラミングでは、より大きな問題をより小さな問題に分割しますが、分割および征服とは異なり、各サブ問題を個別に解決することは含まれません。 むしろ、小さなサブ問題の結果は記憶され、類似または重複するサブ問題に使用されます。 ほとんどの場合、これらのアルゴリズムは最適化に使用されます。 手持ちの副問題を解決する前に、動的アルゴリズムは以前に解決された副問題の結果を調べようとします。
動的アルゴリズムは、局所的な最適化ではなく、問題の全体的な最適化を目的としています。
動的プログラミングアルゴリズムの重要な例は次のとおりです-
- フィボナッチ数列
- ナップザック問題
- ハノイの塔