私が初心者だったころは日常会話にアルゴリズムなんて単語は出てきませんでした。もっぱらコンピュータにかじりついている人だけに通じる単語だったのです。今は、プログラミングをしなくても「Googleが検索アルゴリズムを変えた」とか表現されますよね。
それだけ市民権を得たのでしょう。語源は人の名前のようです。
一般的には
問題を解くための手順
とされています。
身近にあるアルゴリズム
おかずの素、スーパーで売っているレトルトのチキン煮で例えてみましょう。問題を解いた結果が料理とします。料理を完成させるためにパッケージの「作り方」を見ますよね。この作り方がアルゴリズムなのです。誰もが、この手順を踏んでいけばパッケージの写真のような料理が完成するのです。まれに違う料理を完成させる人がいますけど。
平均の出し方
平均の出し方は小学生のときに習います。プログラミング的な例を出すと「5人の年齢の平均を出しなさい」といった場合、皆さんは全員の年齢を足して5で割れば良いと思うはずです。この作業を分解すると下記のようになります。
- 男性5人の年齢を足して合計を出す。
- 合計を5で割る。
この答えを出すときの作業手順がアルゴリズムです。
流れ図
フローチャートとも呼ばれます。アルゴリズムは流れ図とした方がなんとなくイメージしやすいのではないでしょうか。日本工業規格で図形の意味(基準)が決められていますが、ここではざっくりと教えますので図形は気にしていません。きちんと学習したい方は他の方のブログ等を参照してください。ここではざっくりと説明します。
始まりがあって終わりがある
どこから始まって、何をもって終了とするのかを最初に決めてください。料理を作るということならば台所に立つが始まりで、食器に盛り付けるが終了としましょう。
いくつかの処理が連なる
例えば野菜炒めを作るということならば、
- 野菜を切る
- フライパンに油をひき温める
- 野菜を入れる
- フライ返し等で野菜を炒める
- 塩または醤油で味付けをする
- 混ぜ合わせるために更に炒める
- 皿に盛る
ということでしょうか。ただこれだけだと不十分です。
条件分岐や判定が含まれることがある
「野菜を切る」と書きましたがどのくらい細かく切るのか。「野菜を炒める」で炒め終わったという判断(判定)は何か。「味付けをする」にも塩味を頼まれたら”塩”を、醤油味を頼まれたら”醤油”を入れるなのか(条件分岐)。
繰り返しが含まれることがある
野菜を炒めるときは途中で炒まったか確認します。そのとき野菜に火の通りが悪い、炒まっていないときはフライ返し等でさらに野菜を炒めますよね。こうやって、条件が満たされるまで繰り返し処理を行うことをループ処理とも言います。
図で表現
まとめ
アルゴリズムは 問題を解くための手順 であり設計図ともいえる流れ図(フローチャート)で表現できる。でも、正直に言えばいつもフローチャートを書いているわけではありません。それを書くことを仕事としている方もいますが、自分でちょこっとアプリを開発するときはいきなりコーディングをしています。
流れ図を書くことが義務付けられている方はがんばって書いてください。ここでは「流れ図は不要だ」と主張しているわけではありませんよ。