【初心者用】アルゴリズムの考え方

Java

プログラムを作る場合、アルゴリズムを考えることは非常に重要です。初心者の方がつまずく原因のひとつが「アルゴリズムを考えられない」ことが挙げられます。今回は、アルゴリズムの考え方を解説していきます。
初心者の方は、「どのようにしてプログラムを書けば良いかわからない!!」と悩むことが多いと思います。参考図書のサンプルを打ち込んで、実行することはできても、練習問題を自分で解こうとすると何も入力できない。このような場面が多いと思います。「私にはプログラミングは向いていない・・・」と落ち込んでしまうかも知れません。でも、安心してください。あなたに才能がない訳ではなく、単に「プログラム的な考え方」ができていないだけです。
プログラムを作る場合、コンピュータの気持ちになって、物事を考える必要があります。「アルゴリズム」という用語を聞いたことがあるかもしれません。プログラムを記述する前に、まずは「アルゴリズム」を考えなければいけません。「でも、プログラムをスラスラ作っている周りの人は、そんなものを書いてませんけど?」と思うかも知れません。じつは、そのような人たちは経験から、頭の中で「アルゴリズム」をきちんと考えています。「アルゴリズム」を考えずに、プログラムを作れる人はほとんどいません。今回は、この「アルゴリズム」の考え方を説明していきます。

以前、「プログラムの考え方」を解説している記事を投稿していますので、まだ読んでいない方は併せて読んでみてください。

【初心者用】プログラムは3つの構成要素で考える
どんなプログラムでも3つの構成要素で成り立っています。この3つの構成要素を意識すれば、プログラムは誰でも作れるようになります。初心者が「プログラムの書き方がわからない」のは、この3つの構成を知らないだけです。今回はプログラムの基本となる3つの構成要素について説明します。

 

太郎さん
太郎さん

いざ、プログラムを作ろうとすると、どうすれば良いかわかりません。何かよいアドバスはありませんか?

続石講師
続石講師

プログラムを作る場合、「アルゴリズム」が大切です。今回は、「アルゴリズム」について、簡単に解説してきます。

アルゴリズムとは

「アルゴリズム」は「算法」と訳されます。ある問題を解決するための手段を論理的に記述したものとなります。このアルゴリズムは、日本語で記述したり、簡単な計算式で記述をします。この「アルゴリズムが最終的にプログラムのもと」になります
「プログラム言語は、どれか一つちゃんと勉強すれば、他のプログラム言語を習得するのは比較的簡単」という話を聞いたことはありませんか? この意味は「あるプログラム言語で、きちんとアルゴリズムを勉強していれば、他のプログラム言語でプログラムを作ることは容易」ということです。つまり、プログラムを作ることで大事なことは、Java言語やPHP、Rubyを理解しているかではなく、アルゴリズムをきちんと理解しているか、になります。
アルゴリズムをしっかり理解することは大切、と話してきましたが、実はアルゴリズムには正解がありません。例えば、「東京駅から大阪駅まで移動するアルゴリズム」を考えてみます。この場合、「東京駅から大阪駅に移動する」ことが目的となります。この目的を達成するためのアルゴリズムはどうなるでしょうか? 「新幹線を使う」というアルゴリズムはすぐ思い浮かぶかもしれません。しかし、他に手段はないでしょうか? ざっと、以下のような手段が考えられます。

  • 新幹線を使う
  • 飛行機を使う
  • 在来線を使う
  • タクシーを使う
  • 自転車を使う
  • 徒歩

「いやいや・・・、徒歩で東京駅から大阪駅まで移動?! 何日かかるの?」と思われるかもしませんが、これでも目的を達成することはできます。したがって、東京駅から大阪駅に移動するためのアルゴリズムとしては、全て正解となります。最終的にどのアルゴリズムを使うかは、何を優先するかになります。移動時間を最低にしたい場合、「新幹線を使う」が正解です。また、とにかく時間はかかっても良いので、料金を最低にしたい場合は「徒歩」が正解となります。どのアルゴリズムを利用してプログラムを作るかは、プログラマの裁量にまかされています。
アルゴリズムを考える場合、正解はないことを覚えておきましょう。人によって、アルゴリズムは異なってきます。

アルゴリズムを考えてみよう

ここでは、具体的にアルゴリズムの考え方を説明していきます。アルゴリズムを作るための考え方の基本は「おこなう処理を細かく、順番に、正確に考える」ことです。では、以下の目的を達成するためのアルゴリズムを順番に考えてみます。

あるロボットをゴールまで移動させるためのアルゴリズムを考えましょう。
このロボットが行える動作は、「1マス進む」ことと「90度右に回転する」ことの2つのみ

続石講師
続石講師

太郎さん、このロボットをゴールまで動かすアルゴリズムはどうなりますか?

太郎さん
太郎さん

簡単ですよ!! 「4マス進む」です!!

皆さんは、どう考えましたか? 太郎さんと同じアルゴリズムでしょうか? 太郎さんが考えたアルゴリズムは、残念ながら不正解です。何故、不正解なのでしょうか? 確かに4マス進めばゴールにたどり着きます。しかし、このロボットは「4マス進む」ことができません。そのような行動は与えられていないのです。与えられている行動は「1マス進む」と「90度右に回転する」だけです。アルゴリズムを考える場合は、できるだけコンピュータの目線で考えるようにしましょう。

続石講師
続石講師

今回は「1マス進む」「1マス進む」「1マス進む」「1マス進む」が正解です。

太郎さん
太郎さん

コンピュータは何でもできると思っていたんですが、意外と面倒なんですね・・・・

プログラムを作るためには、アルゴリズムを考える必要があります。アルゴリズムを考える場合、人間的な曖昧な考え方ではなく、行わせたい処理を「細かく、順番に、正確に考える」必要があります。

練習問題

続石講師
続石講師

では、皆さんに練習問題です。次の場合、ロボットをゴールまで移動させるためのアルゴリズムを考えてみてください。

アルゴリズムを考える場合、何ができるのか(何しかできないのか)を確認して、手を抜かずに、順番にやらなければならないことを詳細に記述してください。

花子さん
花子さん

「1マス進む」「1マス進む」「90度右に回転」「90度右に回転」「90度右に回転」「1マス進む」「1マス進む」ですね!!

続石講師
続石講師

花子さん、正解です!!

太郎さん
太郎さん

やっぱり、アルゴリズムって面倒ですね。無駄なことが多すぎませんか?

続石講師
続石講師

そうですね。確かに無駄が多くなります。実際は、無駄が多いアルゴリズムの記述を簡素化するための工夫がありますよ。

アルゴリズムの簡素化

アルゴリズムを考えた場合、細かく順番に記述しなければならないので、冗長(無駄)が多くなります。「1マス進む」「1マス進む」「1マス進む」「1マス進む」という記述は、太郎さんの言うように「4マス進む」と表現できた方が、見やすくなります。見やすくなれば、誤解されづらくもなります。そこで、実施にアルゴリズムを記述する場合は、様々な簡易表記を利用します。
プログラムを作る場合でも、聞いたことがあるかもしれませんが、以下の3つの表記方法があります。

  • 逐次処理
  • 繰り返し処理
  • 分岐処理

なんとなく、聞いたことがありませんか? プログラムを作る場合に必ず書籍などで説明されているので、覚えている人も多いかもしれません。これらの知識はアルゴリズムを記述する場合も利用されます。それぞれの処理について、説明していきます。

逐次処理

「記述された処理を順番に実行する」処理のことです。アルゴリズムは逐次処理だけで記述することができます。アルゴリズムを考える場合、とりあえず逐次処理がどうなるかを考えていきます。なお、逐次処理は簡素化するための表記法はありません。

繰り返し処理

「同じ処理を何度も繰り返し実行する」処理のことです。同じ処理を連続して記述している場合、それらを1つにまとめて、簡素化して表記することができます。「1マス進む」「1マス進む」「1マス進む」「1マス進む」という記述は、「4回繰り返す」「1マス進む」「繰り返しはここまで」という感じで簡素化できます。プログラムでは「for文」や「while文」が繰り返し処理になります。

分岐処理

「ある条件によって、処理を分岐させる」ための処理のことです。プログラムでは、この分岐処理も非常に重要です。「if文」が分岐処理になります。逐次処理は必須ですが、繰り返し処理は表記法の簡素化なので、使わなくてもプログラムは成り立ちます。しかし、この分岐処理は逐次処理と同じくらい重要な処理となります。例えば、みなさんが天気予報の降水確率を確認して、雨傘をもって出かけるかを判断する場合、必ず分岐処理を使ってます。この判断は逐次処理だけでは実現できません。もちろん、繰り返し処理でもこの判断はできません。


アルゴリズムを考える場合、基本は逐次処理で考えていきます。しかし、逐次処理ではどうしても実現できない場合ができてます。その時に、「繰り返し処理」や「分岐処理」を使って対応しなければなりません。様々な目的に1つのプログラム(アルゴリズム)で汎用的に対応するためには、これら3つの処理を組み合わせる必要があります。例えば、ロボットを使った以下の問題のアルゴリズムを考えてみてください。
この問題では、途中何マスあるのかわかりません。そのため、順次処理のみで記述することができないのです。この場合のアルゴリズムの正解例は「ゴールに着くまで繰り返す」「1マス進む」「繰り返しはここまで」となります。

まとめ

今回は、プログラムを作るもととなる「アルゴリズム」の考え方について説明してきました。

  1. プログラムを作る前に、できるだけアルゴリズムを考える
    • おこなう処理を細かく、順番に、正確に考える
  2. アルゴリズムには正解はない
    • 目的の処理が実現できれば、どのアルゴリズムも正解
  3.  アルゴリズムには、3つの処理がある
    1. 逐次処理
    2. 繰り返し処理
    3. 分岐処理
続石講師
続石講師

次回は、アルゴリズムを図式化する「フローチャート」について説明します。

タイトルとURLをコピーしました