2016年06月21日

できるだけわかりやすく説明してみるという実験:アルゴリズムとは?

IT関係からかなり離れた分野の人と話をしている時に、ついIT関係の用語を使ってしまうことがある。
そんな用語の中で、最も"???"という反応が多く、その言葉を説明しようとすると、とても難しいのが

アルゴリズム

だ。

口頭だけで”アルゴリズム”を説明しようとしても、上手くは伝わらない。
「プログラムの考え方。論理的な手順。」

うーん、もし僕が逆の立場だったとしたらチンプンカンプンだなあ。
だいいち、"プログラム"が何なのかもまだよく分かっていないというのに。 
(という方は、「プログラムとは何か?」を参照。) 

そこで、プログラムとは?アルゴリズムとは?をわかりやすく説明するために、ここで日本語でプログラムのようなものを書いてみます。

【問題】
1から100までの間の適当な数字が書かれたカードが10枚ある。
この10枚のカードに書かれている数字の中で最大のものはいくつか?

さて、この問題を解くにはどういうやり方があるだろうか?
これを高速に解くための工夫はいくつかあるのだろうが、誰もが最初にぱっと思いつく一番簡単な方法は、「総当り法」、つまり一枚ずつ見ていきながら、最も大きな数字を見つける、ということだ。

これを、日本語プログラムで書くと、、、

1 :最大の数が書かれたカードを入れる箱をひとつ用意する。
2: ここから一枚ずつ、10回見ていくよー(ループ)[
3:  カードを一枚引く
4:  (一枚目のときは)最大数の箱に入れる
5:  (二枚目以降の時は)
6:   (箱の中のものより大きい時は)箱の中のカードを出して、今引いたカードと入れ替える
7:   (箱の中の数字と同じか、小さい時は)何もしない
8:  ]ここから一枚ずつ、10回見ていくよーのループはここまで

何の説明もしなかったが、まず、読みやすいように各行に番号をつけた。
[]印はループ。2行目の"["と最後の行の"]"で囲まれた部分が10回繰り返される。
()印は判定。「もし〜なら()の後ろに進む」。

この[ ]で囲まれた中の動作を10回繰り返すと、問題にあった「10枚の中で最も大きな数字が書かれたカード」が箱の中に残ることになる。

この場合の「一枚ずつ見ていきながら、都度、その時点での最大のものを箱に入れる」というのが"アルゴリズム"。
あるいは、そのアルゴリズムには「総当り法」という名前がついていて、プログラマーの常識としては「総当り法」というだけで、上記の方法を指す共通の認識だったりする。
さらには、これよりももっと高速に最大のカードを探す方法があり、そういう工夫をすることが、「より良いアルゴリズム」であるとされる。

【今回のまとめ】
  • アルゴリズムとは、プログラムの動作を論理的に定義する手続きのことである。
  • んー、前回のプログラムの時に上記のような日本語プログラムを書いてみればもっと分かりやすかったかなあ。。。


OLランキングで1位になりたい!賛同していただける方は下記をクリック!