アルゴリズム (algorithm) は、ある問題を解くための、明確で有限な手順の集まり です。
語源は 9 世紀の数学者アル・フワーリズミーの名前で、計算の手順 を意味するようになりました。
まず押さえたいポイント
入力 → 手順 → 出力が明確に定義されている- 有限のステップで必ず終わる (停止性)
- 同じ入力には同じ出力を返す (決定的なものが基本)
- レシピや料理の手順書がよく使われる比喩
アルゴリズムの良し悪しを測る指標
同じ問題を解くアルゴリズムでも、効率に大きな差が出ます。これを測るのが 計算量 です。
時間計算量— 入力サイズが増えたときに、処理時間がどれだけ増えるか空間計算量— どれだけメモリを使うかO 記法 (ビッグオー)—O(n)O(log n)O(n^2)のように、おおまかな増え方を表す
例えば、ソートでも バブルソート (O(n^2)) より クイックソート / マージソート (O(n log n)) のほうが、大きなデータでは圧倒的に速くなります。
代表的なアルゴリズムの分類
探索— 線形探索 / 二分探索 / 幅優先探索 (BFS) / 深さ優先探索 (DFS)整列 (ソート)— バブルソート / クイックソート / マージソート / ヒープソートグラフ— ダイクストラ法 / A* / クラスカル法動的計画法 (DP)— 部分問題の答えを再利用して効率化する分割統治— 問題を小さく分けて解いて統合する
ヒューリスティックとの違い
アルゴリズム (厳密解法) と ヒューリスティック は、しばしば対比されます。
アルゴリズム— 正しい答えを必ず出すが、時間がかかることがあるヒューリスティック— 最適とは限らないが、速く実用的な答えを出す
ただし両者は排他的ではありません。A* 探索のように アルゴリズムの枠組みの中でヒューリスティック関数を使う ハイブリッドも一般的です。
よくある誤解
アルゴリズム = プログラミング言語のコード ではありません。アルゴリズムは 考え方・手順そのもの であり、特定の言語に依存しません。同じ二分探索を Python でも Java でも書けます。
また、近年は SNS のアルゴリズム のように おすすめを決める仕組み の意味で使われることも増えましたが、これは 機械学習 を含む広義の用法です。古典的な意味の 明確な手順 とは少しニュアンスが違う点に注意してください。
詳しくは ヒューリスティックとは?経験則で近似解を得る考え方とアルゴリズムとの違い で、厳密解法と近似解法の使い分けを整理しています。