アルゴリズム(英: algorithm[注 1])とは、解が定まっている「計算可能」問題に対して、その解を正しく求める手続きをさす[注 2]。あるいはそれを形式的に表現したもの。
実用上は、アルゴリズムの実行に要する記憶領域の大きさや完了までに要する時間(空間計算量と時間計算量)が小さいこと、特に問題の規模を大きくした際に必要な記憶領域や計算量が急激に大きくならないことが重要となる。
アルゴリズムの実行は形態によらない。コンピュータプログラムはコンピュータ上に実装されたアルゴリズムの例である。
概要フローチャートはアルゴリズムの視覚的表現としてよく使われる。これはランプがつかない時のフローチャート。
岩波国語辞典「算法」に、まず「計算の方法」とした後に2番目の詳細な語義でalgorithmの訳として、特に、同類の問題一般に対し、有限回の基本的操作を、指示の順を追って実行すれば、解がある場合にはその解が得られ、解がない場合にはそのことが確かめられるように、はっきりと仕組んである手順。
とある。一見では国語辞典らしい平易な日本語で書かれた説明だが、例えば解が無いと無限ループに陥るといったようなものは除外されるし、「アルゴリズムの視覚的表現」としてよく使われるフローチャートのようなもので書いてあっても、基本的操作がはっきりと書いてなければそれはアルゴリズムではない、というわけである。これは、#形式化の節で述べるような、理論計算機科学での「アルゴリズム」の扱いに沿っている。 記録に残る最古のアルゴリズムは、エウクレイデスの原論のものである。その中でも、二つの整数の最大公約数を求めるユークリッドの互除法[1]は、典型的なアルゴリズムとして知られている。 「アルゴリズム」という名称は、現在のイラクのバグダードにおける9世紀の数学者アル=フワーリズミー[注 3]の名前から来ているといわれている。彼がインド数学を紹介した著作『インドの数の計算法
歴史
1920?30年代、計算可能性のための数学モデル(計算モデル)がいくつも提案された(チューリングマシン、帰納的関数、ラムダ計算など)。後にこれらの定義はすべて同等であることがわかり、それらにより同値な概念を「計算可能」とすることが提案された(チャーチ=チューリングのテーゼ、提案者はスティーヴン・コール・クリーネ。なお、チューリングのほうを先とする専門家もいる)。したがって、現在では「これらによって『計算可能なもの』を計算する手続き」をアルゴリズムと呼ぶ。 ここではまず非形式的にアルゴリズムについて述べた後で、停止性など形式的(フォーマル)な議論を続ける。 アルゴリズムはコンピュータが情報を処理する基盤である。すなわち、プログラムは本質的にはアルゴリズムであり、コンピュータが特定のタスク(従業員の給与計算、学生の成績表の印刷など)を(指定された順序で)実行するためのステップをコンピュータに指示する。したがって、アルゴリズムはチューリング完全なシステムで実行可能な操作の並びとみなすこともできる。
形式化