アルゴリズムの意味
アルゴリズム(algorithm)とは、問題を解決したり、目的を達成したりするための処理手順を、順序立てて明確に表したものです。
例えば、複数の数値から最大値を求める場合、次のような手順が考えられます。
- 最初の数値を仮の最大値とします。
- 次の数値と仮の最大値を比較し、より大きければ更新します。
- すべての数値を調べ終わるまで比較を繰り返します。
- 最後に残った最大値を結果とします。
このように、何をどのような順序で行うかを具体的に定めたものがアルゴリズムです。
アルゴリズムはコンピュータに限らず、料理の手順や目的地までの経路の探索など、日常生活のさまざまな場面にも存在します。
同じ問題でも複数のアルゴリズムが考えられ、処理にかかる時間や必要な記憶容量が異なる場合があります。
アルゴリズムとプログラムの違い
アルゴリズムは処理の手順そのものであり、プログラムは、その手順をコンピュータに実行させるために具体的な命令として記述したものです。
アルゴリズムは、日本語などの自然言語、フローチャート(流れ図)、疑似コードなどで表現できます。特定のプログラミング言語に依存しないため、同じアルゴリズムをPythonやJavaScriptなどの異なる言語で実装することもできます。
アルゴリズムの基本構造
アルゴリズムは、基本的に次の三つの制御構造を組み合わせて表現できます。
| 構造 | 内容 | 例 |
| 順次処理 | 決められた順番に処理を実行する | 数値を入力し、2倍して表示する |
| 分岐処理 | 条件によって実行する処理を変える | 60点以上なら「合格」と表示する |
| 反復処理 | 同じ処理を繰り返す | 1から10までの整数を順番に加算する |
特に反復処理では、初期値、繰返しを続ける条件、繰返しごとの値の更新を確認することが重要です。
例えば、変数xを0として、「xが10未満である間、xに3を加える」という処理を考えます。
xの値は、
0 → 3 → 6 → 9 → 12
と変化します。12になった時点で「xが10未満」という条件を満たさなくなるため、処理は終了します。
このように、処理を実行する前に条件を判定する方式を前判定の繰返しといいます。終了時の値は、条件に指定された値と一致するとは限りません。
また、終了条件が満たされず、処理が繰り返され続ける状態を無限ループといいます。
入力・処理・出力
アルゴリズムの働きは、入力(Input)・処理(Process)・出力(Output)に分けて整理できます。
例えば、温度センサの測定値から警告を表示するシステムでは、次のようになります。
| 区分 | 内容 |
| 入力 | 温度センサから測定値を取得する |
| 処理 | 直近10件の平均値を計算し、基準値と比較する |
| 出力 | 基準値を超えていれば警告を表示する |
何を受け取り、どのような計算や判定を行い、何を結果として示すのかを区別することが、アルゴリズムを考える基本となります。
アルゴリズムと著作権
プログラムは、著作物として著作権法によって保護される場合があります。一方、一般的なアルゴリズムの考え方や処理手順そのものは、著作権の保護対象ではありません。
例えば、数値を小さい順に並べ替えるアルゴリズムそのものを著作権で独占することはできません。しかし、そのアルゴリズムを実装したプログラムの創作的な表現は、保護される場合があります。
このため、同じアルゴリズムを独自にプログラムとして実装することと、他人が作成したプログラムのコードを無断で複製することは区別されます。
なお、アルゴリズムに関連する技術が特許などの対象になる場合もあるため、必ずしも自由に利用できるわけではありません。