よく聞くけどイマイチ分からない言葉…アルゴリズムとは?コンピュータに仕事をさせるための手順書…のこと。
こんにちは!かるび修行部屋の ゆずぱ です。
情報処理技術者試験には抽象的な言葉がよくでてきますが、イマイチ分からない言葉の1つが “アルゴリズム” という言葉ではないでしょうか?
実は、コンピュータはこのアルゴリズムの集まりで出来てます。なので、情報処理技術者にとって、かなり大事な概念なんです。しっかりおさえていきましょう!
アルゴリズムとは何なのか?
アルゴリズム=マニュアルみたいなもの
アルゴリズムという言葉を辞書でひいてみましょう。どんな意味なのでしょうか? “ある問題を解決するための手順” と書かれています。うん、よく分かりませんね…(-_-;)
この言葉はコンピュータに限った話ではないのですが、 とりあえず コンピュータにやらせたい事を手順にしたものをアルゴリズムと呼ぶんだ と考えてしまいましょう。
例えるならば…”バイトマニュアル”みたいなもの!
いろいろ怒られてしまいそうですが…それで大丈夫 ですd(^_^o)
実際に問題を解決してみる
では実際の例を見てみましょう。身近な例で… 洋菓子屋さんでクッキーを作る仕事をアルバイトにやってもらいましょう。さて…あなたならどのように仕事をやってもらいますか?
答えは簡単です…マニュアルを作ってその通りにやるように指示しますよねd(^_^o)
同じ問題でもアルゴリズムは無限!
マニュアルはもちろん店によって違いますよね。他の洋菓子店のマニュアルを見てみましょうd(^_^o) 出来上がるものは同じでもその手順が異なることが分かります…d(^_^o)
これがアルゴリズムの面白さです。クッキーを作るという 仕事の内容は全く同じでもその手順は無限に存在します。そして…それぞれの手順に特徴があるのが一般的ですd(^_^o)
さて、ここで質問です…
・最も短時間で大量生産できるアルゴリズムは?
・最も原料を無駄にしないアルゴリズムは?
・最も変化(仕様変更)に対応できるアルゴリズムは?
変化(仕様変更)とはクッキーの重さが変わったり、クッキーの厚さが変わったりする事ですd(^_^o) できるだけ手順を変えずに仕様変更に対応できるのはどれでしょうか?
それぞれの手順はアルゴリズムととらえることができます!
生産性が高いのは効率型アルゴリズムでしょう。生地が無駄にならないのは無駄なしアルゴリズムでしょう。手作り風アルゴリズムは生地は無駄になりませんが、とても時間がかかりそうですねd(^_^o)
なぜアルゴリズムが必要なのか?
コンピューターは “おバカ” だから
なぜアルゴリズムが必要なのでしょうか? それはコンピュータがおバカだからです。コンピュータはひとつひとつ手順を教えてあげないと仕事をすることができないんです。
世の中のコンピュータは全て人間が作ったアルゴリズムに従って動いています
えっ、AI(人工知能)はコンピュータが自ら考えて動いてるんじゃないのか?と思われるかも知れませんが、AI(人工知能)も人間が作ったアルゴリズムですd(^_^o)
人間と機械の違い
仕事を与えられた時、人間はどうするでしょうか?どういう手順をふめば仕事を終わらせることができるか考えます。もしくは周りの先輩に仕事の手順を聞いたりしますよね。
いっぽうコンピュータはどうでしょうか? 手順を教えてあげないと仕事をすることができませんd(^_^o) またコンピュータは指示どおりに動くので間違った指示を出してもダメですね。
コンピューターに効率よく働いてもらうため
アルゴリズムが必要な理由… コンピュータがおバカだからです。が、逆の表現をすると コンピュータに効率よく働いてもらうために必要なもの です!
具体的なアルゴリズムの例は?
カーナビの経路探索から映像の圧縮まで…
それでは具体的なアルゴリズムの例をご紹介しましょう。世の中はアルゴリズムで溢れています。便利な世の中はアルゴリズムが支えているんですねd(^_^o)
カーナビの経路探索の精度が改善していると実感したことはないでしょうか?それは、経路探索アルゴリズムが日々進化しているからです。
スマートフォンの音声認識の精度が上っていると感じた事はありませんでしょうか?それは、音声認識アルゴリズムが日々進化しているからです。
世の中のアルゴリズムは常に改良され新しいアルゴリズムが研究され続けていますd(^_^o)
情報処理の世界でおさえるべきアルゴリズム
情報処理技術者試験で覚えておくべきアルゴリズムは、整列アルゴリズム と 探索アルゴリズム の2つのカテゴリです。この2つのカテゴリでアルゴリズムをおさえましょう!
整列アルゴリズムとは… その名のとおり、たくさんあるデータを大きい順に並べるアルゴリズムです。選択ソートやバブルソートなど7種類をおさえれば良いでしょう。
探索アルゴリズムとは… その名のとおり、たくさんあるデータから目的のデータを探し当てるアルゴリズムです。線形探索や二分探索など3種類をおさえれば良いでしょう。
動物の行動もアルゴリズム!
蚕(カイコ)の成虫であるカイコガの異性を探すときの行動パターンは わずか数行でプログラミングできるような単純なアルゴリズム という事がわかっているそうです∑(゚Д゚)
カイコガの脳神経細胞数は10万個程度で人間の1000億個よりもかなり単純な構造です。生物の脳にもアルゴリズムがしっかりとインプットされている んですね(・_・;
アルゴリズムはどうやって記述する?
手順書の形式には限界がある…
さて今までアルゴリズムの概要を学んできましたが、どうやって表現したら良いでしょうか? 以下は情報処理試験を受ける ある人の試験当日の行動を決めるアルゴリズムです。
いままではこんな感じで表現してきました…
しかしこの表現…限界があると思いませんか?
ご想像どおり…アルゴリズムが複雑になるとゴチャゴチャになって書く人も読む人も大変になるのです。そのためアルゴリズムを表現する方法はたくさん考えられています。
その中で情報処理技術者試験に出題されるのは…
・ 箇条書き
・ 流れ図
・ プログラミング言語
という3つの表現方法 です。それ以外の表現手法は情報処理技術者試験には、出題されていないので説明はしませんd(^_^o) ※ 2019年時点の記事です…。
アルゴリズム 3つの表現
それでは先ほどの “試験当日の行動を決定するアルゴリズム” をさっそく3つの表現手法で表現してみましょう。まずは、箇条書きという手法からどうぞd(^_^o)
とてもシンプルですね。人間にはとても読みやすい のですが、複雑なアルゴリズムはこの箇条書きでは表現することはできません… (やろうと思えばできなくもないですが…(^_^;))
次は、流れ図という表現方法です。
別名フローチャートといい、見た事がある方も多いのではないでしょうか?情報処理技術者試験ではこの表現は頻出 しています。箱がたくさんありますが箱の形にも意味があります。
最後はプログラミング言語による表現です。
ちょっと、読みにくく感じる方もいるかと思います(^_^;) 可能な限りコンピュータが理解しやすいように、かつ人間が書きやすいような表現手法 になっています。
ご紹介した3つの表現は全て同じアルゴリズムを表現していますが コンピュータに仕事をお願いする時には3つ目に紹介した “プログラミング言語” の形で指示 することになりますd(^_^o)
アルゴリズム 3つの処理
最後にアルゴリズムを表現するのに使う3つの処理をご紹介します。
実はどんなに複雑なアルゴリズムであっても細かく分解すると 3種類の処理だけで表現できることが数学的に証明されています∑(゚Д゚)。たった3種類です。
・逐次処理(上から順番に実施する処理)
・選択処理(条件によって分岐する処理)」
・反復処理(条件が満たされるまでくり返す処理)
の3種類です。ひとつづつ処理の概要を、さきほど紹介した3つの表現方法で見てみましょう。まずは最もシンプルな逐次処理ですd(^_^o)
上からひとつずつ順番に処理をするので、表現もすごくシンプルです。3つの表現方法、どれを見てもパッと見でと理解できます よねd(^_^o) 次は選択処理を見てみましょう。
補足ですが 逐次処理で出てくる具体的な処理は “式を変数へ代入する処理” しか出題されません∑(゚Д゚) コンピュータができる事は所詮は数字の計算なんです。
なので 手順を最小単位まで分解すると 式を計算して代入することになってしまう のです。
ちょっと複雑になりましたが、プログラミング言語でも有名なIF文というヤツ ですねd(^_^o) 条件に合致していたら “処理6” を実施し、合致していなかったら “処理7” を実施するというもの。
最後は 反復処理 を見てみましょう。
こちらもプログラミング言語で有名なFOR文というヤツです。著名なアルゴリズムは必ずといっていいほど反復処理がうまく使われています。ここでの説明は省きますが芸術的ですよ。
アルゴリズムの3処理×3表現
さて、3つの表現と3つの処理をおさえましたので、最後はまとめです。いろいろなアルゴリズムを知ることも大切ですが、その基本となる要素はたった3x3の表に集約 されますd(^_^o)
まとめ
今回のテーマは分かっているようでイマイチ分からない”アルゴリズム”という言葉… 可能な限り図を使って分かりやすくまとめてみました_φ(・_・
アルゴリズムとはコンピュータに仕事をしてもらうための手順書… 例えるならアルバイトの方に配布するバイトマニュアルみたいなものですd(^_^o)
整列アルゴリズム や 探索アルゴリズム などの具体的なアルゴリズムの説明も順次、投稿したいと思います。それでは!
コメント