ホームページ >ウェブフロントエンド >jsチュートリアル >データ構造とアルゴリズム |アルゴリズム | DSA
コンピューターサイエンスでは、アルゴリズムは機能とデータ構造に基づいて分類されることがよくあります。基本的なアルゴリズムの種類をコア機能ごとに分類すると次のようになります。
これらのアルゴリズムは、配列やリストなどのデータ構造内の特定の項目を見つけるのに役立ちます。
線形検索: ターゲットが見つかるまで各要素を順番にチェックします。
二分探索: 検索間隔を繰り返し半分に分割することで、ソートされた配列を効率的に検索します。
ジャンプ検索: ソートされた配列内で前にスキップし、セグメント内で線形検索を実行します。
内挿検索: 均一に分散されたソートされた配列で使用されます。検索キーの位置を推定します。
これらのアルゴリズムは、要素を特定の順序 (通常は昇順または降順) で並べ替えます。
バブルソート: 順序が間違っている場合、隣接する要素を繰り返し入れ替えます。
選択並べ替え: 最小の要素を見つけて、リストの並べ替えられた部分に移動します。
挿入並べ替え: 各要素を適切な場所に挿入して、並べ替えられたリストを作成します。
並べ替えのマージ: 分割統治アプローチを使用して、リストを分割、並べ替え、および結合します。
クイックソート: ピボットを使用してリストを分割し、部分配列を再帰的にソートします。
ツリー アルゴリズムは、ツリー データ構造内での移動、操作、検索に使用されます。
バイナリ ツリー トラバーサル: 特定のシーケンスでノードにアクセスするための、順序内、事前順序、および事後順序のトラバーサルなどの手法。
二分探索木 (BST): 各ノードに左 (小さい) 子と右 (大きい) 子がある二分木。
AVL ツリー: 自己平衡型二分探索ツリー。
赤黒ツリー: バランスをとるための特定の色のルールに従っている、バランスの取れた BST。
セグメント ツリー: 範囲クエリと更新に使用されます。
これらのアルゴリズムは、ノード (頂点) とエッジで構成されるグラフに対して動作します。
深さ優先検索 (DFS): バックトラックする前に、各ブランチに沿って可能な限り探索します。
幅優先検索 (BFS): 次のレベルに移動する前に、すべての近隣を探索します。
ダイクストラのアルゴリズム: 重み付きグラフ内のノード間の最短経路を見つけます。
Bellman-Ford アルゴリズム: 最短経路を検索しますが、負の重みを持つグラフでも機能します。
Floyd-Warshall アルゴリズム: ノードのすべてのペア間の最短パスを計算します。
動的プログラミング (DP) は、複雑な問題を重複する部分問題に分割することで解決するために使用されます。
フィボナッチ数列: ボトムアップアプローチを使用して n 番目のフィボナッチ数を計算します。
ナップザック問題: リソース割り当ての最適化問題を解決します。
最長共通部分列 (LCS): 2 つの文字列に共通する最長のシーケンスを検索します。
行列チェーン乗算: 行列を乗算する最適な方法を決定します。
貪欲なアルゴリズムは、各ステップで局所的に最善の選択を行い、全体的な最適値を見つけます。
Prim のアルゴリズム: グラフの最小スパニング ツリーを見つけます。
Kruskal のアルゴリズム: 最低コストのエッジを追加することで最小スパニング ツリーも見つけます。
ハフマン コーディング: 最も一般的なシンボルの最短コードを使用してバイナリ ツリーを構築することでデータを圧縮します。
アクティビティの選択: 時間的に重複しないアクティビティの最大数を選択します。
これらのアルゴリズムは解決策を段階的に試行し、行き止まりに達するとバックトラックします。
N クイーン問題: N 個のクイーンを競合なしで N×N ボードに配置します。
Sudoku ソルバー: バックトラッキング アプローチを使用してパズル グリッドを埋めます。
迷路ソルバー: それぞれの可能性を探索して迷路内の道を見つけます。
分割統治アルゴリズムは、問題をより小さな部分問題に分割することで問題を解決します。
並べ替えのマージ: リストを半分に分割し、それぞれの半分を並べ替えて、それらを結合します。
クイックソート: ピボットを中心にリストを分割します。
二分探索: 探索間隔を分割して対数時間でターゲットを見つけます。
これらの各カテゴリは、さまざまな種類の計算問題を処理するためのさまざまなアプローチを提供しており、特定のタスクに適切なアルゴリズムを選択しやすくなります。
以上がデータ構造とアルゴリズム |アルゴリズム | DSAの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。