アルゴリズムをはじめよう

アルゴリズム

アルゴリズムとは?について簡単にまとめる。(清書は後でやる)

スポンサーリンク

アルゴリズムを勉強しようと思ったきっかけ

もともと私はいきなり言語の勉強から始めた人。(多分今の人達はほぼそうなのではないだろうか)

言語の勉強から入っても、その言語の特徴などを覚えればプログラムは書ける。
だからアルゴリズムっていう名前は知っていたけど、別に学ぶまではいらないよね?とずっと思っていた。
あと、アルゴリズムってすごい古いものだというイメージもあったってのもある。

でも、会社で同じチームのSV(スーパーバイザー。いわゆる上司と教育担当が合わさったみたいな感じ)から「アルゴリズムの基礎も勉強しといたほうがいい」とアドバイスされたのもあり、なぜアルゴリズムを勉強したほうがいいのか?また、どうして今アルゴリズムなのか?ということが気になった。

アルゴリズムを学ぶことはプログラミングにおいて重要!

アルゴリズムはプログラミングの世界にだけ使われるものではない。
例えば日常生活においても重要なことである。

日常生活でのアルゴリズム

では日常生活でのアルゴリズムとは具体的に何があるのか。
例えば晩御飯を作る時は「ただご飯を作るだけ」ではなく、

  • 最近何を食べたか考える
  • 足りない栄養素はなにか考える
  • 1日分だけ買うのか、何日かまとめて買うのかをスケジュールを見ながら考える
  • その上で献立を考える
  • 冷蔵庫にあるものを確認し、足りないものをメモする
  • 調味料も残量を確認する
  • お米を1合分取り出す
  • 洗って炊飯器に入れ、水に浸しておく
  • (味噌汁のだし用)昆布を取り出し、濡らしたふきんで拭いておく
  • 鍋に昆布を入れて水に浸しておく
  • エコバッグを取り出す
  • 財布のお金を確認する
  • 鍵を持って家を出る
  • スーパーへ向かう

。。。という実に多くの工程をこなしている。
そして、これこそが「アルゴリズム」というものらしい。

そして、このアルゴリズムをしっかり身につけている人は途中で手惑わずスムーズにいく。
例えば上記の工程だと、冷蔵庫にあるものを確認せずにただ買いたいものを買ってしまうと、あとで冷蔵庫に材料が入らず困るかもしれない。
また、お米を洗わずに買い物に行って、帰ってきてご飯を作ったあとにご飯がない!ということになって慌てるかもしれない。
・・などである。

プログラミングの世界でのアルゴリズム

ではプログラミングの世界の中でのアルゴリズムとは何か。
その例をこちらにまとめてみる。

私は料理をするが、いつも「いかに早くできるか」ということを考えている。
料理に1時間もかけてられないし、かけていたらお腹が空いてしまってしんどくなるから。

なので、例えば野菜を切る時などもいかに早く切れるかを常に考えている。

例えば人参を例にあげる。

人参をいちょう切りにしたい時皆さんはどういうふうに切るか。

1*
・人参の皮を剥き、人参を横において、口を丸く切る(スライスする)
・次に丸く切った口を4つに切る

2*
・人参の皮を剥き、人参を横において真ん中に包丁を入れ、人参全体を切る
・人参を4つにして、それをまとめてスライスする

この方法があると思うが、私は2をいつもやっている。
これはイラストでもわかりにくいかもしれないが、2のほうが作業工程は遥かに少ないのである。

こんなふうにして、「どうやったら無駄な作業を省いていかに時間を短縮できるか」を考えながら料理をしている。

これはプログラミングにも応用できるのである。

つまり、

「どういう処理を書けばいかに無駄なコードを省き、処理を短縮化できるか?」

ということである。

そしてそういう考え方こそがアルゴリズムなのである。

では、次からはアルゴリズムの基礎に入る。

アルゴリズムの種類

実は、アルゴリズムには3つの基本形がある。

順次構造

順次構造とは、最初から順番に処理する手順のことである。

例えば先程書いた、私が買い物に行くまでの工程で言うと、

①エコバッグを持つ
②財布のお金を確認する
③財布をかばんに入れる
④鍵を持つ
⑤ドアを開けて鍵をかける
⑥エコバッグを持ってスーパーへ行く

という工程がある。
このように、順番に工程をこなしていくことを「順次構造」という。

選択構造

では、上記の処理で一部「選択しなければならない行動」が発生するとしたら?

例えば、④で鍵を持ちたいけど、鍵がなかったらどうするか?
そう、鍵を探さないといけない。
そして鍵を探しても見つからなかったらどうするか?
この場合、スーパーへ行くのは諦めて家族に頼むか、一人暮らしなら鍵の業者に来てもらうか。
また鍵の業者に頼みたくても時間が遅くて営業していなかった場合はどうするか?
等色々と考えないといけない。

このような工程を「if構造」とも言い、「もし~だったらどうするか?」「また~が~だったらどうするか?」という処理が続く。

これを「選択構造」という。

反復構造

そして最後に、例えば⑥でエコバッグを持ってスーパーに行くとしよう。
しかし、最寄りのスーパーがおやすみだったら?

他にもスーパーがあればそこに行くだろう。
しかしそこのスーパーも閉まっていたら?
また別のスーパーに行くかもしれない。

そうやって、買い物できるスーパーが見つかるまで繰り返す。

これを「反復構造」という。

この場合、一番簡潔に処理を済ませることができる方法としては、
「事前にスーパーの営業時間、お休みを確認して行くスーパーを決める」行動を先に済ませておく、ということである。
すると、プログラミングでも反復処理を省くことができる可能性がある。

まとめ

今回はアルゴリズムの基礎についてまとめてみた。(基礎中の基礎と言ってもいいかもしれないが)
ちなみに、参考にした本はこちらである。

次は変数、配列についてまとめてみる。

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