アルゴリズム
皆様こんにちは、株式会社コアブリッジの柳です。
前号では、情報やデータについて記しました。
今回は、それらと対になる”アルゴリズム(Algorithm)”について述べていきます。
※本コラムの特性上、用語の厳格な定義にはこだわらず「”情報”と”データ”は同じもの」「”処理”と”アルゴリズム”は同じこと」として以下述べていきます
情報処理技術=データ+アルゴリズム
アルゴリズム(Algorithm)とは「問題を解決するための処理や手順」のことです。小さな子供に買い物を頼む際に、
1)A店で○○を買う
2)B店に行き××の値段を調べる
3)C店に行き××の値段を調べる
4)B店とC店の安いほうの店で××を買う
のように書いて示す手順書のようなものです。
一度手順書を書いてしまえば、いつでも誰でもその通りに実行すれば期待された結果が得られます。
一般に、特定の目的を達成するためのアルゴリズムは一通りとは限らず、他の手順もありえます。
IT(Information Technology)は”情報技術”と和訳されますが、日本で従前から”情報処理”という言葉が使われています。日本の国家試験に”情報処理技術者試験”とあるのが典型です。
“情報”を”処理”する、すなわち、データを(アルゴリズムによって)処理するのがITであり、冒頭で「アルゴリズムは情報やデータと対になるもの」と記したのはそのためです。
例えばこんな感じ
非常に単純なアルゴリズムを3パターン記してみます。
例1)カップの中身を入れ替えるアルゴリズム
ティーカップにコーヒー、コーヒーカップに紅茶が入っているのを入れ替える手順は、
1:待避用カップに、ティーカップの中のコーヒーを移し替える
2:ティーカップに、コーヒーカップの中の紅茶を移し替える
3:コーヒーカップに、待避用カップの中のコーヒーを移し替える
例2)年齢によって料金を決定するアルゴリズム
6〜11歳ならば子供料金(1,500円)、12〜70歳ならば大人料金(2,500円)、それ以外ならば無料というルールで料金を決定する手順は、
1:年齢が6歳未満(5歳以下)ならば無料
2:1には該当しなくて、12歳未満(11歳以下)ならば子供料金(1,500円)
3:2にも該当しなくて、70歳以下ならば大人料金(2,500円)
4:3にも該当しなければ、無料
例3)一番安い商品を探すアルゴリズム
横一列に並んでいる10種類の商品の中から一番安いものを探す手順は、
1:左端の商品の値段を最安値として覚えておく
2:一つ右隣の商品の値段と覚えていた最安値を比べて、
3:右隣の商品の値段が最安値よりも安ければ最安値として記憶する
4:左から何番目の商品か覚えておく
5:2〜4を右端まで繰り返す
なお、例1〜3における”データ”は、
例1のデータ:コーヒー、紅茶
例2のデータ:年齢、料金
例3のデータ:各商品の値段、最安値、最安商品は何番目か
です(処理の対象=データ)。
世の中のあらゆることは3つの処理構造で必ず書き表せる
あらゆるアルゴリズムは以下に示す3つのパターンを組み合わせれば必ず実現できることが論理的に証明されています。
構造1)順次:順番に処理を行う
上記の例1です。ただ単に、示された順序で実行するだけです。
構造2)選択:条件に合致した場合に該当の処理を行う
「この条件に合致したら処理Aを行う、合致しなければ処理Bを行う」
という構造です。上記の例2と、例3の一部で使っています。「合致しない」場合の処理は必須ではありません。
処理Aや処理Bには、「構造1」で記した処理を記述します。
また、条件に合致した場合(あるいは合致しない場合)に、さらに別の条件判定を行うこともあります。つまり、構造2の中にさらに構造2が入ることがあります(例2も条件判定を重ねています)。
構造3)繰り返し:条件に合致するまで処理を繰り返す
「条件に合致する間はずっと同じことを繰り返し実行する」構造です。上記の例3がそうです。
「固定回数繰り返す」「先頭から最後まで繰り返す」「目的に到達するまで繰り返す」「無限に繰り返す」などがあります。
繰り返し構造の中に別の繰り返し構造を含めることもできますし、例3のように、繰り返し構造の中に構造2の選択構造を入れることもあります。
プログラミング言語で記述してみる
プログラミング(Programing/Programming)においては、上記の3構造を使って処理を記述します。
以下に、上記の例1〜3をプログラミング言語で記述してみます。
プログラムの知識がない方でも、何となく雰囲気は掴めるでしょう。
※JavaやC言語という有名なプログラミング言語の文法をもとに記述していますが、あくまで雰囲気を掴んでいただくためのプログラム(抜粋)であり、このまま記述してもエラーが出て実行はできません
※プログラム例中の「if」「else」「while」以外の単語は全て「データ」です。何のデータか直感で分かりやすいようなデータ名にしています。
(例1)
escape = teaCup;
teaCup = coffeeCup;
coffeeCup = escape;
(例2)
if (age < 6) {
fee = 0;
} else {
if (age < 12) {
fee = 1500;
} else {
if (age <= 70) {
fee = 2500;
} else {
fee = 0;
}
}
}
(例2の別の書き方)
if (age < 6) {
fee = 0;
} else if (age < 12) {
fee = 1500;
} else if (age <= 70) {
fee = 2500;
} else {
fee = 0;
}
(例3)
lowestPrice = price[1];
index = 2;
while (index <= 10) {
if (lowestPrice > price[index]) {
lowestPrice = price[index];
}
index = index + 1;
}
AIとはちょっと違う
昨今、コンピュータが判断してくれることを「AIがやってくれる」と表現しているのをよく見聞きしますが、「いやぁ、それはAIではなく、単なるアルゴリズムでしょ」ということもしばしばあります。
AI(Artificial Intelligence:人口知能)は、アルゴリズムの進化版のようなもので、以下の特徴を持ちます。
・アルゴリズムの組み合わせで実現されている
・「学習機能」を有している ← これが大事!!
・学習を重ねていくと結果が変わっていく(精度が上がっていく)
学習を行わず、毎回決まり切った手順を実行し、同じ条件で同じ処理を行うと同じ結果が出るのは単なるアルゴリズムです。
AIや学習機能についてはまた別の回に記します。
今号は以上です。
では、また次回お会いしましょう。
※本文中の情報、状況、数値等は執筆時点のものです