2006 年 5 月 30 日 19 時 11 分

アルゴリズムと性能


このアーカイブは同期化されません。 mixi の日記が更新されても、このアーカイブには反映されません。


ののぐらむに限ったことではないが、
特定の命題を成し遂げるためのアルゴリズムは、
たった一つだけであるとは限らない。

例えば、アルゴリズムの代表ともいえる、
ソートやサーチには、色々な手法が存在し、
それらにはそれぞれ良し悪しがある。

今回の題材に当てはめてみると、最初に考えた手法は、
特定の領域が占有する部分を確定する思考ルーチンだ。
昨日の考察により、この方法では確定できないが、
人間的に見ると確定できる部分があることが分かった。

確かにこの思考ルーチン(アルゴリズム)は完璧ではないが、
それなりの速度で幾つかのセルを確定することができる。
つまり、これはこれで役に立つというわけだ。

なので、このルーチンに更なる改造を加えるより、
新たな別の思考ルーチンを考えて、
状況によって使い分けるような処理の仕方の方がよさそうだ。

さて、では昨日の考え方の実装方法を 1 から考えてみよう。

昨日の日記では、2 つの例を示したが、
それらはなかなか「処理」として論理的に考えにくい。
1 つめは、「ヒントの値より小さい隙間(空白間)は
必ず空白で確定する」という論理的な考え方もできるが、
2 つめは、そう単純にはいかない。

これらを、いくつかのより論理的な細かい条件に分解し、
それらの条件をデータベース化し、
解答時に条件に該当するか順に調べる方法はある。

しかし、今回の場合、条件を洗い出すのは難しい。
解答欄の長さやヒントの数の可能性が多すぎるためだ。

同様の考え方として、全解答パターンを洗い出すという、
いかにもコンピュータ的な考え方もある。
現在の解答状態とヒントを元に、
考えられるあらゆるパターンを計算し、
その統計を取って確定するセルを導くという方法だ。

確かに、この方法を使えば、確定できるセルは
漏れなく洗い出されるのは間違いない。
しかし、これもヒント数や解答欄の大きさによっては、
全パターンを洗い出すのに時間がかかりすぎると予想される。

ではどうするか。

セルを塗り潰しとして確定する方法は、
「セルが確実に塗り潰される」ことを確認するだけではない。
「セルが確実に空白にならない」ことを確認してもいいのだ。

そう、白黒のののぐらむの場合、セルは、
塗り潰されるか、空白になるかのどちらかしかないのだ。

このように、命題の解答が絞り込まれているときに、
非常に効果を発揮する手法がある。

それは、「帰謬法(背理法)」だ。



Copyright (c) 1994-2007 Project Loafer. All rights reserved.