アルゴリズムとプログラム
アルゴリズムとプログラムという言葉は、コンピュータの世界でよく登場する言葉です。プログラミングにはアルゴリズムが欠かせないものとなっており、仕様書や詳細設計書に頻繁に記載されます。冒頭では、理解を深めるために日常生活に置き換えて考えてみます。
料理を作る場合を例に
料理を作る際には同じ料理でも、その作り方は様々です。例えばカレーやラーメンスープの仕込み方には、それぞれ秘伝の方法があることが知られています。この秘伝の方法を一般的にはレシピと言います。この秘伝の味を出す手順は決まっていますので、同じ工程で仕込みを行います。
この場合アルゴリズムに相当するのが秘伝のレシピで、プログラムに相当するのが仕込みの作業工程と考えるとよいでしょう。
四則演算をする場合を例に
日本の学校教育においては小学時代に九九を学びますが、四則演算の方法は多様でそろばんを使うと大量の桁数の計算ができます。インド式計算法では19x19まであっという間に計算できます。もちろん電卓を使う人もいます。この場合、計算方式を最初に決めて実際に作法を当てはめていきます。
この例ではアルゴリズムに相当するのが計算方式や使用する機器で、プログラムに相当するのがその計算方式や機器の作法や操作手順となります。
アルゴリズムとプログラムの違いを簡単に
上記の例にある通り、通常何かを行うにあたっていくつもの手法があります。散歩で同じ目的地に行く場合でも、その日の気分や用途に応じて色々なルートから経路を選択するのが一般的かと思います。
このように、何かを行う際の手法を一般化したものをアルゴリズムと言います。プログラムはそのアルゴリズムを実際の手順に置き換えたものを指します。言語仕様に基づいて作成する、コンピュータの実行コードに該当します。
アルゴリズムとは
アルゴリズムとは、何かを行う際の手法を定められたルールや法則を導いて一般化したものを指します。問題の解法や解決手法などの分類に応じて、手続きを一般化したものです。高校時代に数学で学んだ公式や解法は、まさにアルゴリズムそのものと言えます。ユークリッドの互除法は、世界最古のアルゴリズムと言われる代表的な解法の1つです。
アルゴリズムの重要性
現実的に何かを行う際の手順や方法は、多岐にわたります。コンピュータ利用においても、その良し悪しや特徴をいかした効果が得られます。というのも、コンピュータはプログラムで指定された指示通りにしか、命令を実行することができません。どのアルゴリズムを使うのかが、処理系の最適化に重要となります。
代表的なアルゴリズム
コンピュータ入門やプログラミング入門において、標準的に用いるアルゴリズムがあります。検索処理とソート処理は、最初に学ぶアルゴリズムで電子計算機の基本的な処理方法となります。
検索処理(探索)は、求める数値や文字列をはじめとする各種データを調べる手法です。検索アルゴリズムは二分探索・線形探索・k近傍法・ハッシュ関数等があります。ソート処理(整列)は、データの集合リストを一定のルールに従い並べ替えるための処理です。ソートアルゴリズムは、バブルソート・挿入ソート・マージソート・クイックソート等があります。
プログラムとは
プログラムとは、コンピュータの実行コードを指します。プログラミングとは、コンピュータ上で動作するプログラムを作成することを指します。言語仕様に基づきソースコード(ソースプログラム)に、コンピュータの具体的な動作を記述していきます。
作成したプログラムのソースコードは、コンパイラやインタープリタを用いて実行コードに変換したり、対話型で実行したりします。コンパイラ言語は、ソースコードを中間オブジェクトや機械語に置き換えて利用するもので、C言語・C++・Java・C#などがあります。インタープリタは対話型に実行するもので、Perl・Ruby・Pythonなどがあります。
アルゴリズムとプログラムの具体的な関係
アルゴリズムは、規則や法則を一般化したものでコンピュータの世界に限ったものではありません。また、プログラムコード自体を指すものでもありません。
プログラムというと、こちらはコンピュータの世界の用語です。アルゴリズムはいくつか存在することがありますが、いずれかのアルゴリズムが決まると、プログラミングで、その手法や解法を実際のコードに実装していきます。言い換えると、コンピュータの世界のアルゴリズムは抽象的なもの、プログラムは具体的なものという関係があります。
プログラムでは具体的にコンピュータの命令に置き換えますので、コンピュータのコードと1対1の関係となります。開発作業では正しい解法をコード化する必要があるので、コンピュータプログラミングを理解する上でアルゴリズムの理解は欠かせないものです。
プログラムでのアルゴリズム利用
計算アルゴリズムについて考えてみると、解法で用いる計算の順番や近似式により計算結果に差が生じます。このようにアルゴリズムは、それぞれの特性や特徴に違いがありますので、同一処理の計算を行う場合でもその実行速度に違いがある場合があります。絶えず高速なアルゴリズムが考案されていますので、最新のアルゴリズムを検討するのが得策と言えます。
独自の解法を考案するとなると、開発期間もかかり、計算精度や計算速度も汎用アルゴリズムを超えるのは難しいと考えられますので、その利用メリットは大きいでしょう。
アルゴリズムのライブラリ化
標準アルゴリズムでは、プログラム言語ごとにその実装コードや関数がライブラリとして提供されることがあります。コンピュータのライブラリ化には、大きなメリットがあります。テスト工程をクリアしたアルゴリズムのコードは再利用可能のため、開発コードの品質が確保できます。
アルゴリズム自体は言語依存性がありませんので、コード開発者に依存しないコードが開発できます。そのため問題特定が容易で、プログラム言語間の差異を吸収できます。言語の違いによらずアプリケーションの移植性を高めることができます。
メンテナンス性が高まり品質の維持向上が可能のため、開発期間の短縮やコスト低減にも繋がります。
アルゴリズム能力を高めるには
IT系の能力試験や採用試験にアルゴリズム問題が登場することがあります。IPA(情報処理推進機構)の実施するITパスポートや情報処理技術者試験においても、試験要綱のテクノロジ系基礎理論の「アルゴリズムとプログラミング」分類として、明記されています。 【参考】:IPA 情報技術者試験・情報処理安全確保支援士試験 試験要綱 試験要綱Ver.4.9
アルゴリズム能力を高めるには、まずはこの出題範囲を理解し知識定着を図るのが良いでしょう。
情報処理技術者試験の出題範囲
アルゴリズムはITパスポートのほか、基本情報技術者試験・応用情報技術者試験・高度試験・支援士試験の午前の出題範囲となります。
基本情報処理技術者試験の場合は、必須のアルゴリズム問題が1問あります。配列やリスト構造・木構造・グラフ・整列・探索、数値計算・文字列処理・図形処理、ファイル処理・計算量・誤差 などが出題範囲となります。応用情報技術者試験の場合は、プログラミング知識の中の選択問題で出題されます。
過去数年の出題内容を学習すると、用語の意味や各アルゴリズムの特徴が理解できますのでご確認ください。
情報処理技術者試験の出題アルゴリズム
アルゴリズム自体はプログラムコードではなく、計算や課題の解法ですが、標準的に用いるアルゴリズムが多数あります。情報処理技術者試験でも、一般的なアルゴリズムが出題されます。
ベースとなるのは、配列を使った探索・整列です。探索(検索処理)は、リスト・文字列・木・グラフなどの構造を対象とし、多くのアルゴリズムがあります。探索手法の違いにより、集合リストや配列などの具体的な解法の特徴や手順を学びます。
並べ替えを整列(ソート処理)と言い、こちらも重要な要素です。データの集合リストを一定のルールに従い並べ替えします。こちらも多くのアルゴリズムがあり、実行回数や効率などの特徴に差が出ます。
アルゴリズムの認定試験
アルゴリズム実技検定は、アルゴリズムやプログラミングスキルを認定する検定試験です。競技プログラミングコンテストサイトを運営するAtCoder社が実施する検定で、プログラミング能力を5段階で評価します。確かなアルゴリズムの理解とコーディング能力が求められます。 【参考】:AtCoder アルゴリズム実技検定
試験時間は5時間で、AtCoderの対応する60以上のプログラミング言語から任意の言語を選択し、アルゴリズムコードを作成します。
アルゴリズム学習の参考書
現在、アルゴリズム学習は学校の情報教育にも取り入れられています。検定教科書の情報は、使用教科書の出版情報を掲載する教科書LODにも登録されています。 【参考】:教科書LODについて
アルゴリズム学習の参考書は、上記検定教科書掲載の検定教科書を利用するか、学習参考書を入手するのが良いでしょう。以降では、おすすめの学習参考書について解説していきます。
Pythonで学ぶアルゴリズムの教科書 一生モノの知識と技術を身につける
学習効果の高いPythonを用いて、アルゴリズム学習を行います。データ構造や主要アルゴリズムを、サンプルコードとともに学びます。資格対策としても活用可能です。
▪著者:廣瀬豪 ▪ページ数:320ページ ▪出版社:インプレスブックス ▪発売日:2021/3/19 【参考】:Pythonで学ぶアルゴリズムの教科書 一生モノの知識と技術を身につける
コンピュータプログラミング -Pythonでアルゴリズムを実装しながら問題解決を行う-
PythonはAIやデータサイエンス分野で広く利用されています。本書ではPythonを用いてアルゴリズムをプログラム実装し、学習していきます。Pythonで提供される関数についても、述べられています。
▪著者:富樫 敦 ▪ページ数:208ページ ▪出版社:コロナ社 ▪発売日:2022/04/28 【参考】:コンピュータプログラミング- Pythonでアルゴリズムを実装しながら問題解決を行う -
アルゴリズムイントロダクション 第3版
MITの計算機アルゴリズムの教育用テキストの翻訳版です。第1巻は、基礎情報と実際のアルゴリズムの解説書で、手引書や辞書として利用できます。第2巻は、より高度な設計と解析の手法・データ構造・グラフアルゴリズムについて解説されています。
▪著者:T. コルメン、C. ライザーソン、R. リベスト、C. シュタイン ▪ページ数:第1巻 424ページ、第2巻 400ページ ▪出版社:近代科学社 ▪発売日:第1巻 2012/08/02、第2巻 2012/12/26 【参考】:アルゴリズムイントロダクション 第3版 第1巻 【参考】:アルゴリズムイントロダクション 第3版 第2巻
普遍的なアルゴリズムはプログラムスキルを高めます
コンピュータにおけるアルゴリズムは、システム化した際の性能や特性を左右する要素として、問題解決の手法や解法によく利用されます。アルゴリズムのロジックを理解できると、開発プログラムを実装した際の、処理システムの設計や要件定義にも活用できます。プログラムスキルも高まりますので、是非理解を深めましょう。
編集部オススメコンテンツ
アンドエンジニアへの取材依頼、情報提供などはこちらから