プログラムとアルゴリズムの関係は?例を使ってアルゴリズムを理解しよう

こんにちは。関東の大学に通う大学生ミンチ(@programminchi)です。今回はアルゴリズムというものをプログラムとの関係に注目しながら理解し、さらに 日常生活の例からアルゴリズムについて考えましょう。

 

 

アルゴリズムとは?

プログラミングをやってる人はアルゴリズムという言葉をよく耳にすると思いますが、一体アルゴリズムとは何なのでしょうか。

アルゴリズムとは、数学、コンピューティング、言語学、あるいは関連する分野において、問題を解くための手順を定式化した形で表現したものを言う。
参照:Wikipedia

 

つまり簡単に言ってしまえば、問題を解く上での解法のことです。

また、アルゴリズムはただ解ければよいというようなものではなく、どれだけ効率よく問題を解くことができるかという点を重視します。

よってアルゴリズムを理解することによってより効率のよいプログラムを書くことができるようになるというメリットがあるのです。

 

プログラムとアルゴリズムって何が違うの?

プログラムとアルゴリズムについて、これらは異なるものですがよくこの2つを混同してしまう人がいるためここで確認していきます。

 

プログラムとは?

プログラムというのは簡単に言ってしまえば、人間がコンピュータに出す命令を記述したものです。

コンピュータは人間の言葉を理解できないので、プログラミング言語を介して人間はコンピュータに指令を出すわけです。

 

プログラムとアルゴリズムの関係性

それではプログラムとアルゴリズムというのはどのような関係にあるのか見ていきましょう。

アルゴリズムというのは上で定義されている通り、問題を解く際にどういった手順でその問題を解いていくのかといういわば解法のことです。

プログラムは命令を記述したもののことなので、アルゴリズムとは違うことが分かると思います。

 

基本的にプログラムの中でアルゴリズムが指定されて、それをコンピュータが実行していくという流れになります。

 

アルゴリズムの日常的な例

上の説明でだいぶアルゴリズムに対するイメージがついたとは思いますが、以下では日常的な例を挙げてアルゴリズムについての理解を深めていきます。

 

画用紙を複数枚切るアルゴリズム

まずは簡単な例を挙げていきます。複数の真っ白な画用紙を想像してください。画用紙を半分の大きさに切っていくという作業を行います。

まず最初に思いつくのは1枚1枚半分に切っていくという作業でしょう。

これは簡単に思いつきますが、結構効率の悪い方法です。

 

それでは次にそれぞれの画用紙を半分に折り曲げてから(はさみで切る方向に折り曲げる)、1枚1枚切っていくことを考えます。

この方法では画用紙が半分になっているので、はさみで切る距離も半分になります。画用紙を切っている時間だけ考えたら半分の時間で作業が終わります。(但し画用紙を折り曲げる時間がかかるのでこちらの方が効率が良いかは分からない)

 

では、次に複数の画用紙を重ねて一気に複数枚の画用紙を切っていく方法を考えましょう。

これは確実に最初の方法よりは効率が良いでしょう。

 

このように作業の手順を工夫すると問題を解決する上での効率が変化します。

そしてこの例で言っている、折り曲げてから切るとか重ねてから切るとかいうのがアルゴリズムです。

 

 

お釣りを少なくするアルゴリズム

これは有名な話なので結構聞いたことがある人もいると思います。

例えば97円の缶コーヒーを買おうとしている時に所持金が102円あります。(100円玉1枚、1円玉2枚)

この時どのように支払いを行えばお釣りの硬貨の枚数を少なくできるかみたいな問題です。

この問題に対して最も簡単な(効率の悪い)解き方は、支払いの全ての場合(1円、2円、100円、101円、102円)を考えそれぞれに対するお釣りの枚数を比べるという方法です。

これに関しては缶コーヒーより安い1円、2円について考える必要がないので、もう少し効率よく解くことができますね。

また、他にも問題の解き方の手順(アルゴリズム)を工夫することで、総当たりで見ていかなくても効率よく答えが導き出せたりします。

 

まとめ

今回はプログラムとアルゴリズムの違いについて説明していきました。また、具体例も出したのでアルゴリズムというのがなんなのか、より理解が深まったと思います。

今後プログラミングを学習していくと探索アルゴリズムやソートアルゴリズムなど色々なアルゴリズムを勉強していくことになっていくと思いますが、その時までに是非、アルゴリズムとは何なのかということをしっかり実感しておいてください。

 

今後も定期的にコンピュータ系の記事を発信していくので是非、興味のある人はツイッターの方もフォローお願いします!!


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です