2010年4月15日木曜日

逆転の発想

逆転の発想が好きである。
中学生の時には、電子工作が好きで、真空管やトランジスタでラジオを良く作っていた。
「初歩のラジオ」だったかに載っていた記事で、真空管は熱が出るので特性が安定しないという性質を逆手にとって、
金属ケースに真空管を入れて、熱するだけ熱せば良いという記事を読んで、「ああ、面白いこと考えるなあ」と思ったのが最初だと思う。

要するに普通の方法が駄目なら逆の方法も試してみるということである。
江崎ダイオードの江崎博士も当時は、半導体の不純物を少なくする方法を考えるという流れに逆らって、不純物いれちゃえー!みたいなノリで、トンネル効果を発見し、江崎ダイオードができた。
江崎博士そうとうなへそ曲がりだと思う。

プログラミングも常識的な一手を疑うことも大切である。
普通の計算方法なら、非常に時間がかかるが、逆にすればあっという間に計算が終わることもしばしばある。

たとえば、以前、ポリゴンの配列にデータを入れていく時に、既に同じデータがあれば、そのインデックスを参照するようなプログラムを作った。
データが少なければ直ぐに計算が終わるが、これが数十万から数百万頂点になると、何度も最初から配列を調べなくてはならないので計算量は指数的に増大して行く。
しかしインデックスを参照するような頂点データは、そもそも偏っていて、近くにあるものである。
毎回配列の最初から探す理由がない。
配列の最後から探す、たったこれだけで、計算量は極端に少なくなる。
画像処理だってそうである。ある画素に相関のあるのは、その画素の近傍だけである。
データの量が多くても、連続性や偏りなどの局所性に注目すれば良いのである。

0 件のコメント:

コメントを投稿