お昼ごはんはタダとはいかない....
2008.05.27
書き出した時点で、お昼休憩中です。皆さんお昼ご飯はいかがでしたか?お昼ご飯代はおいくらでしたか....という話では、残念ながらないです(ちなみに私は大概会社の近くの自宅に帰ってお昼ご飯です。今日は昨日の残りモノで、鳥ごぼうご飯と、アスパラのおひたし、大福豆、大根おろし+金山寺味噌というメニューでした)。
お昼ごはんはタダではいけません! というのは、有名なSFネタのジョークです。「ノーフリーランチ定理」と呼ばれる面白い定理があります。それは、
数学的にありうべき全ての問題の集合について、どの探索アルゴリズムも同じ平均性能を示す
と主張します。結構意外じゃないですか?
プログラマ、というと「このアルゴリズムは性能がいい/悪い」というのを肌で知ってる...というのが望ましいですけども、しかし、それは「日常に現れる一般的な問題」の場合に「性能がいい・悪い」という議論をしているだけなのです。プログラマだったら、「いいアルゴリズム」がデータによって「ウラをかかれ」た経験があるんでは..と思います。たとえば、速いアルゴリズムの代表であるクィックソートは、すでに整列したデータを与えた時に、O(n2 ) にまで性能が劣化します。勿論「ホントにいいアルゴリズム」の場合は「最頻のケース」と同様に、「最悪のケース」に対する備えを心がけるべきなのですが....
このノーフリーランチ定理を言い換えると、
あらゆる問題で性能の良い汎用最適化戦略は理論上不可能であり、ある戦略が他の戦略より性能がよいのは、現に解こうとしている特定の問題に対して特殊化(専門化)されている場合のみである
ということになります。「よくある場合に性能がいい」と「ウラをかかれると性能が悪い」とは同じことの両面に過ぎないことをこの定理は示すのです。汎用的であればあるだけ、「最良の場合の性能」は悪化してしまいます....汎用性と特殊性のせめぎあい、というプログラマがいつも頭を悩ます問題というのは、回避不可能な本質的な問題なのです。
これはもっと広く考えて、問題とその解決法、という視点で考えるのも面白いでしょう。問題を「汎用的に解決する」のは非常に難しいわけです。
という極めつけの「汎用的な問い」への答えを要求された銀河最高のコンピュータ「ディープ・ソート」は、
42
という極めて「汎用的な答え」を返します(詳しくは「銀河ヒッチハイクガイド」を...)。「42」は答えに違いないのでしょうが、それは人間にとって「利用可能な答え」ではありえないのです....「汎用的」なのがいつもいつも正しいわけではないのです。
投稿者 : 杉浦 こずえ | 投稿日時 : 2008.05.27 13:48





