テクノロジー

プログラミングを学ぶなら知っておこう!アルゴリズムの意味とは

プログラミングを学ぶなら知っておこう!アルゴリズムの意味とは

「アルゴリズム」という言葉を耳にしたことがある方もいますよね。プログラミングを行うためには欠くことのできない基本的な概念ですので、プログラミング経験者の方は十分に理解していることでしょう。プログラミングに詳しくない方でも「アルゴリズム」という言葉ははっきりとした意味が分からないという方もいらっしゃるかもしれません。

「アルゴリズム」はプログラミングの専門用語のようにも思えますが、いろいろな意味を持つ言葉でもあります。

そこで今回は、プログラミングの学習には決して欠くことのできない概念である「アルゴリズム」の意味について「音楽のリズムの一種か何か?」という人にもわかりやすいようにご紹介していきましょう。

みんな知ってるあの体操は実は…!?

アルゴリズム体操のイメージ
「アルゴリズム」という言葉を聞いて、「アレ」を思い出す人も多いはず。そう「アレ」です。NHK Eテレの子供向け番組「ピタゴラスイッチ」内で放送されている「アルゴリズムたいそう」

実際に見たことのある人も多いあの「アルゴリズムたいそう」という名前にはどんな意味が込められているのでしょう。アルゴリズムという言葉は本来「手順」といった意味合いを持っています。

実際に「アルゴリズムたいそう」を見たことがある人であればその意味が何となく分かるのではないでしょうか。「♪手を横に あら危ない 頭を下げればぶつかりません」たくさんの人が並んで異なる動きを行っているような状況において、みんなが同じ手順(=アルゴリズム)に従って動作すればぶつかることもないということです。

この「アルゴリズムたいそう」では、「たくさんの人が異なる動きをするとぶつかってしまう」という問題を解決する手続きとして、ある手順(=アルゴリズム)を定めることによって「ぶつからない」という状況を実現しているのです。

つまり、「アルゴリズム」が意味するのは、ある問題を解決するために手順を定めてそれを一般化することである、と表現することができます。これは他ならぬ、プログラミングの基本となる概念ですよね。

プログラミングにおいて「アルゴリズム」という言葉が意味するところは、問題を解決するためにどういった手順で処理をを行えばよいかということであり、それを実際にプログラミング言語で記述したものがプログラムのソースコードとなるわけです。

答えは決してひとつではない!アルゴリズムの奥の深さとは!?

一つだけではないイメージ
アルゴリズムというものは、ほとんどの場合において「これが正解」というものは定まることがありません。ある問題を解決するためには、その手順・方法は一つとは限りませんよね。もちろん、プログラムの処理実行速度や、メモリの使用量などを勘案すると、よりよいアルゴリズムというのが存在するのは確かです。それでも、答えは決してひとつではないことに変わりはありません。

例えば、一般的によく示される例として、「ソート」という処理があります。いわゆる「並び替え」です。通販サイトなどでは皆さんも頻繁に目にするのではないでしょうか。

これは「価格の安い順に並べ替える」「評価の高い順に並べる」など、日常的によく使われています。また、仕事で使うExcelでも作成したデータを並べ替える処理は簡単に実行することができますよね。

実はこの並べ替えの処理ひとつをとってみても、さまざまなアルゴリズムが存在するのです。

ここではいくつかの「ソート」処理のアルゴリズムを紹介することにしましょう。

1,バブルソート

バブルソートは、極めて原始的でありシンプルなアルゴリズムなので、直感的に理解しやすい方法です。
ランダムな数字の入った箱が、縦にいくつか並んでいるとします。一番下の箱から順に、”上の箱と比較して上のほうが大きければ交換する”といったことを箱の数だけ繰り返します。すると、一番上の箱には最も小さな数が入っているはずですよね。
次は、一番上の箱を除いて同じことを繰り返し行います。すると、上から二番目の箱には二番目に小さな数が入ります。これを最後まで繰り返すと、数の小さい順に並べ替えることができます。

ちなみに、数がどんどん上に浮かび上がっていく様を泡に例えて「バブルソート」と名づけられました。これは人間にとってはとても理解しやすいアルゴリズムではありますが、処理に大変な時間を要してしまいます。数十個程度のデータであれば問題ないでしょうが、並べ替え対象のデータが多くなると、どうしても時間がかかってしまうのが難点です。

2,マージソート

マージソートは、バラバラに並んでいるデータの列を、細かく分割していき、再び併合する過程で、並び替えを行っていくという方法。「マージ」とは「併合」という意味です。

このアルゴリズムでは処理のステップ数がバブルソートよりも少なくて済むので、比較的データの多い場合でも対応が可能です。

3,クイックソート

クイックソートは、その名が意味するとおり高速な処理が特徴のアルゴリズムで、データの比較と交換回数が非常に少ないアルゴリズム。そのため、さまざまなアルゴリズムの中でも最も効率よく並べ替えができるアルゴリズムであるともいわれています。

以上、今回ご紹介したもの以外にもソートのアルゴリズムは数多く存在します。一般的には、処理速度が求められることが多いですが、目的や用途に応じて、アルゴリズムを使い分けることが可能なのです。

このように、ある問題を解決するための手順(=「アルゴリズム」)は決してひとつとは限らないことがおわかりいただけたのではないでしょうか。「アルゴリズム」は難しいけれど奥が深くて面白い、その意味はこういったところにあるのかもしれません。

AI(人工知能)にももちろん欠かせない「アルゴリズム」を改めて考える

決定木のイメージ
ここからはAI(人工知能)と「アルゴリズム」について考えていくことにしましょう。

AI(人工知能)の機械学習において必要となるのは、条件分岐による判断や、データをもとにした予測などの手順ですよね。これらはすべて、「アルゴリズム」として考えることができます。

例えば、条件分岐によって判断するアルゴリズムとしては「決定木」などがあります。「決定木」は、その名のとおり条件分岐を繰り返していく様がツリー上にどんどん展開されていき、最終的に判断を導き出すというもの。この「決定木」を応用したものが「ランダムフォレスト」と呼ばれるアルゴリズムです。
「ランダムフォレスト」は、分類や回帰分析に用いられる機械学習のアルゴリズムで、たくさんの決定木を使って多数決を取るような方法です。このアルゴリズムでは、大量のデータを必要としますが、その分精度の高い予測や分類を行うことができます。
AI(人工知能)および機械学習の根幹ともいわれる「ニューラルネットワーク」もまた、アルゴリズムの一種といえます。ニューラルネットワークは、人間の脳神経系のニューロンを数理モデル化して組み合わせたものです。入力層、中間層、出力層の3層(または4層以上)において、入力層から出力層に値を送っていき、最終的に答えを導き出します。

今回は、プログラミングに欠かせない「アルゴリズム」という言葉の意味についてご紹介しました。
アルゴリズムまとめのイメージ

身近な「アルゴリズムたいそう」や「ソート」処理を例にご紹介したように、ある問題を解決するためのアルゴリズムは必ずしも一つだけとは限りません。目的や状況に応じて、適したアルゴリズムを選んだり、また組み合わせて問題の答えを導き出す必要があります。

多くの人が意味を分かっているようでわかっていないこの「アルゴリズム」という言葉ですが、これからプログラミングを学ぼうという人はぜひともこの「アルゴリズム」という言葉の意味と概念をしっかりと理解したうえで学習に取り組んでください。そうすれば、プログラミングの知識やスキルも飛躍的に向上するでしょう。

コメントをどうぞ

トップへ戻る
タイトルとURLをコピーしました