アルゴリズムの基礎

 2018.08.24  株式会社テリロジー 技術統括部

初めまして。今年4月に入社した、新人の豊島です。

現在、社内で基本情報技術者の勉強会をしています。

今回はそこで教わった、アルゴリズムについてシェアしたいと思います。

参考にした本は勉強会で使用した、「アルゴリズムを、はじめよう」です。

book.impress.co.jp

アルゴリズムとは

正直、アルゴリズムという単語自体、NHK教育番組で芸人の’いつもここから’さんが踊っているアルゴリズム体操しか思い浮かびませんでした。

アルゴリズムとは、

問題や課題を解決するための処理手順(操作手順)なのですね。

ではプログラムは、順番が決まっている、細かな処理手順(アルゴリズム)の集合体ということになるのでしょうか。

検索してみたところ、ダンスによってアルゴリズムを説明している動画がありました。

AlgoRythmics(フォークダンスでアルゴリズムを説明するムービー集)

www.youtube.com

この動画は、データを昇順・降順に並べる整列アルゴリズムをフォークダンスで説明しています。他にもいくつか種類があったので、興味がある方は調べてみてください。

www.youtube.com

行動からアルゴリズムを解く

では具体的にどのようなことなのか、行動から理解を深めていきたいと思います。

例えば、あるロボットを作り、そのロボットに次のような

プログラムを実行してもらいたいと思います。

「パン屋さんでメロンパンを買うまでの行動」

  1. パン屋に入る
  2. 全体を見渡し、メロンパンを見つける
  3. メロンパンのところへ行く
  4. メロンパンを取り、レジに向かう

上記の1~4までがアルゴリズムです。
細かくしようと思えばできますが、ざっくり書くとこのようになるかと思います。

では、このアルゴリズムに条件を追加します。
価格を見て、買うか買わないか、判断できるようにします。
小麦の急な値上がりでメロンパンの価格が高騰しているにもかかわらず、
メロンパンを買ってしまう可能性があるからです。

  1. パン屋に入る
  2. 全体を見渡し、メロンパンを見つける
  3. メロンパンのところへ行く
  4. 価格を見る
  5. 200円以上ならあきらめて、出口へ向かう
  6. 200円未満ならメロンパンを取り、レジへ向かう

価格を見て、判断することを追加しました。
その後の行動(出口へ向かうことやレジへ向かうこと)も、それぞれ記述が必要です。

こうして、行動から紐解いてみると、複雑な作業はシンプルな作業の組み合わせからなっているものだと思いました。

プログラムの評価基準

参考書籍「アルゴリズムをはじめよう」によると、作ったプログラムの処理手順(アルゴリズム)は、4つの点を基準に評価するといいそうです。

・分かりやすい
他の人がみて分かりやすい。(短いとかよりも)
・高速
実行してから結果が得られるまでの時間は短い。
・効率的
プログラムを実行したとき使用するメモリの領域が少ない。
・再利用
過去に書いたプログラムを再利用できる。
伊藤静著,2012年発行:「アルゴリズムを始めよう」より引用

このように評価基準が明確にあれば、自分でも評価できますね。
大切なのは、この4つの評価基準を軸に、何を求められているか明確にすることですね。
ひたすら高速に処理ができるように作成してほしいという場合もあると思います。

では、早速、この評価基準を使って、
価格を見て判断するようにしたプログラムを、評価したいと思います。

パン屋さんに毎日行くとしたら、以下の行動を毎日しなければなりません。

  1. パン屋に入る
  2. 全体を見渡し、メロンパンを見つける
  3. メロンパンのところへ行く
  4. 価格を見る
  5. 200円以上ならあきらめて、出口へ向かう
  6. 200円未満ならメロンパンを取り、レジへ向かう

少し面倒(効率的ではない)と思ったので、また一つ、条件を追加します。
メロンパンが値上がりしたら(小麦が高騰したら)、教えてもらえるようにします。

  1. 小麦の価格の情報をもらう
  2. 価格が高騰していなければ、買いに行く
    1. パン屋に入る
    2. 全体を見渡し、メロンパンを見つける
    3. メロンパンのところへ行く
    4. メロンパンを取り、レジに向かう
  3. 価格が高騰していたら、買いに行かない

初めに条件を持ってくることで、毎日行かないですむようになりました。

まとめ

今回記事を作成するにあたり、改めてアルゴリズムを考えてみましたが、「複雑なプログラムもひとつひとつの処理を紐解いてみれば、シンプル」であることが分かりました。
プログラム言語を覚えて、プログラムを組めるように頑張ります。


RECENT POST「技術コラム」の最新記事


技術コラム

Sumo Logic ダッシュボードやフォルダ共有について

技術コラム

Sumo Logicのアラート作成方法について

技術コラム

Sumo Logic Collecterの設定移行の方法  

技術コラム

サイバーセキュリティとレイヤーディフェンスについて

アルゴリズムの基礎