もともとはコンピュータ用語だったものが、最近ではその他の分野でも使われることが多い。例えば”インプット”。「この件に関しては部長にもインプットしておいてください」などと言う。(あまり言わないか。。。)あるいは「ぬるぽ」。これは2ちゃんねる用語なのかもしれないが、元々は”Null Pointer Exception(ヌル・ポインター・エクセプション)”というJavaというプログラミング言語でプログラムに不具合があるときに起こるもので、俗に「ヌルポ」と言っていたものがそのうち2ちゃんねるで普通に使われるようになった。(そんなに普通には使わないか。。。)
そして最近よく耳にするようになったコンピューター用語に「アルゴリズム」がある。これは特に株式取引などで使われるようだ。我々プログラマーは株式取引のことをあまり知らなくても、「アルゴリズム取引」と聞くとだいたいどういうことを意味するのかが想像がつく。しかしそれ以外の分野の人が聞くと最初は何のことなのかまったくわからないだろうな、と思う。
さて、「アルゴリズム」という用語について。これはコンピューター分野以外の人に説明するのはかなり難しい言葉(概念)だ。それをむりやり言葉で説明するならば、「プログラムの考え方。論理的な手順。」ということになるのだろうが、うーん、もし僕が逆の立場だったとしたらちんぷんかんぷんだなあ。だいいち、”プログラム”が何なのかもまだ分かっていないのに。(という方は、「プログラムとは何か?」を参照)そこで、アルゴリズムとは何か、ということを説明するために、ある問題を出してみる。
【問題】
1から100までの間の適当な数字が書かれたカードが10枚ある。
この10枚のカードに書かれている数字の中で最大のものはいくつか?
というのをどう解けばいいか?というのがアルゴリズムだ。この場合の解き方には、ちゃんと考えれば効率の良い方法がいくつも浮かぶはずだが、とりあえずわかりやすくて確実な方法として「総当り方」というものについて考えてみよう。つまり、一枚ずつ順番に見ていく、というとても効率の悪い方法だ。この方法の手順を書くと、、、
1. 最大の数が書かれたカードを入れる箱をひとつ用意する。2. 一枚目のカードを引き、それを最大数の箱に入れる。3. 二枚目のカードを引き、もし箱の中のカードよりも大きな数だったら、今引いたカードと箱の中のカードを差し替える。4. もし引いたカードの方が小さな数だったら何もせずに次のカードを引く。5. 三枚目のカードを引き、もし箱の中のカードよりも大きな数だったら、今引いたカードと箱の中のカードを差し替える。6. もし引いたカードの方が小さな数だったら何もせずに次のカードを引く。7. 四枚目のカードを引き、もし箱の中のカードよりも大きな数だったら、今引いたカードと箱の中のカードを差し替える。8. もし引いたカードの方が小さな数だったら何もせずに次のカードを引く。。。。以下繰り返し。
これを十枚目まで繰り返すと、最後に箱の中にあるカードが一番大きな数字のカードである。
これがアルゴリズムだ。そしてこのアルゴリズム通りにコンピューターが処理をするようにその手続きを書いたものを「プログラム」という。本当はもっと高速に、効率よく最大の数を見つける方法はあって、そういうものを「より良いアルゴリズム」と言ったりする。
【今回のまとめ】
- アルゴリズムとは、プログラムの動作を論理的に定義する手続きのことである。
- そのアルゴリズム通りにコンピュータが処理を行うようにその手続きを書いたものが「プログラム」だ。