○アルゴリズム生活

最近思うのだが、アルゴリズムという言葉が誤解されている。
例の体操のせいだろうか。


正論で言うと、アルゴリズムは「解法の手順」を言う。


方程式で一発で計算できないモノも、ある計算手順で計算できたりする。


不思議なのは、方程式を発見するとノーベル賞とか取れたりするのだが、アルゴリズムで大きな賞が取れたという話はあまり聞かない。
世の中はすべて「方程式で記述できる」という甘い幻想がそうさせ、アルゴリズムを排除しているのかも知れない。
すくなくとも「方程式よりアルゴリズム」という世の中より、世の中はシンプルであろうが、限界もあるだろう。


ま、それはそれとして、日常的な例えでアルゴリズムを考えると例えば「超整理術」というのがある。これは一時期一世を風靡した。


本棚の本を整理するとき、あいうえお順やカテゴリ別に並べるのが常套手段である、しかし、家電製品のマニュアルなど、カテゴリ別において置いてもしょうがないものが意外に溜まってくる。
こういうとき、超整理術を使うと整理が楽だ。


整理とは、つまり、無用なものを捨てること。


したがって、超整理術ではいかに無用のものを捨て有用なものを取り出しやすくするかに工夫がある。
工夫があるといっても一度覚えると簡単である。


家電製品のマニュアルで言うと、使ったものは本棚の右の端に戻す、ただそれだけである。一年経ったら、左側にあるマニュアルから適当に捨てる。


つまり、本棚から出す、しまう、という動作にアルゴリズムを加えると、それが知らない間に「もっとも使わないものが左に、もっとも使うものが右に」整理されるのだ。
まさに、アルゴリズムのなんたるかを端的に象徴した例であろう。
名刺も同じように整理すると、実は、あいうえお順や業種別に日々整理するよりもはるかに早く目的の名刺に到達するし、なにしろ管理がラクだと言われている。


並べ替えた状態や目的ではなく、並べ替えの「手順」そのものをアルゴリズムと言うのである。


ちなみに、本棚をあいうえお順にもっとも早く並べるアルゴリズムのひとつは。
まず、棚の真中あたりの適当な本を決めその本より50音で若い本をその本を境界にして左に、そうでないのを右にすべて移動する。
次にその本と一番左の端までの間で適当に本を選び、同じようにする。
つまり、左へ左へと半分、半分、半分と分けながら入れ替えていき、本が一番ひだりの2冊になったらその2冊(もちろん「あ」行になっている)を並べ替え、次に半分、半分、半分と分けたステップを1つ戻り、同様に並べ替え、つぎに2ステップ戻って、またそのグループを半分、半分と分けて並べ替え、つぎには3ステップもどって、そんな具合に繰り返す。
これが「めっちゃくちゃになってる本棚」を対象にした最も早い並べ替えアルゴリズムのひとつで「クイックソート」と呼ばれ、平均的にnlogn回の入れ替え手順で並べ替えられる。
20冊なら平均して86回の入れ替えで済む。
本を本棚から出してしまって、小分けにしたグループをまず並べ替えておき、グループ同士を2組づつ「まぜながら」並び替える方法は「マージソート」と呼ばれクイックソートとほぼ同じ回数で並べ替えが完了するが、広い作業場が必要である。


本棚の左から右へ隣同士を比較して2冊づつ並べ替え、一番右へ行ったらまたそれを繰り返すという方法をバブルソートと呼ぶが20冊なら平均して400回入れ替えなければならない。
誰でもよく行う方法、本棚全部を一冊づつ見て「あ」の最初の本を探し、一番左に持ってきて・・・・と繰り返す方法は「選択ソート」と呼ばれ、実はバブルソートと手順の回数は同じである。


本が100冊になると、クイックソートは664回に対して選択ソートは1万回の手順が必要になる。一般的な方法は本が増えると爆発的に作業数が増えてしまう。


このように処理対象が増えれば増えるほどアルゴリズムのパワーは絶大である。


家庭で使う工具をしまうときにも、アルゴリズムは応用できる。
家庭で使った工具は「最後に使ったものは工具箱の上に置く」のだ。
それをしまうのは、工具箱の上にあるものでは用が足りず別のものを工具箱から取り出したとき、にする。
たったこれだけで、工具箱のふたを開けたり、工具箱の中を探したり、整理したりという手間がおよそ半分に減る。
これは、すべての工具が平均的に必要になるわけではなく、たいていがドライバーかペンチが必要になることが圧倒的に多く、しかも、一度直したところが修理が甘くまた壊れることも多いからである。
これを「バッファリング」と言う。


よいアルゴリズムは「手順」を省く。
よいアルゴリズムは非常に手間のかかることを簡単に済ませることができる。
さらによいアルゴリズムは手順を考え出すときには多少の苦労がいるが、一度完成してしまうと、作業していることを意識させず、高度な作業を行うことができる。
当然、複雑なことを常に意識しながら作業するよりもミスが少なくなる。


おもしろいことに、アルゴリズムに基づいた行動は、一般の概念を超えたところに目的があるので、一見すると「奇妙」に見える。
超整理術を行うと非常に「ものぐさ」な感じだし、クイックソートは「意味不明」だし、工具箱にしまわないという方法に至っては「それってしまってないだけじゃん」と突っ込まれる。


アルゴリズムを考える、ということは、退屈な作業をおもしろくしてくれる。


それ以上にアルゴリズムはむやみに常識や良識に囚われる回数を減らしてくれる。