このアーカイブは同期化されません。 mixi の日記が更新されても、このアーカイブには反映されません。
ののぐらむに限ったことではないが、
特定の命題を成し遂げるためのアルゴリズムは、
たった一つだけであるとは限らない。
例えば、アルゴリズムの代表ともいえる、
ソートやサーチには、色々な手法が存在し、
それらにはそれぞれ良し悪しがある。
今回の題材に当てはめてみると、最初に考えた手法は、
特定の領域が占有する部分を確定する思考ルーチンだ。
昨日の考察により、この方法では確定できないが、
人間的に見ると確定できる部分があることが分かった。
確かにこの思考ルーチン(アルゴリズム)は完璧ではないが、
それなりの速度で幾つかのセルを確定することができる。
つまり、これはこれで役に立つというわけだ。
なので、このルーチンに更なる改造を加えるより、
新たな別の思考ルーチンを考えて、
状況によって使い分けるような処理の仕方の方がよさそうだ。
さて、では昨日の考え方の実装方法を 1 から考えてみよう。
昨日の日記では、2 つの例を示したが、
それらはなかなか「処理」として論理的に考えにくい。
1 つめは、「ヒントの値より小さい隙間(空白間)は
必ず空白で確定する」という論理的な考え方もできるが、
2 つめは、そう単純にはいかない。
これらを、いくつかのより論理的な細かい条件に分解し、
それらの条件をデータベース化し、
解答時に条件に該当するか順に調べる方法はある。
しかし、今回の場合、条件を洗い出すのは難しい。
解答欄の長さやヒントの数の可能性が多すぎるためだ。
同様の考え方として、全解答パターンを洗い出すという、
いかにもコンピュータ的な考え方もある。
現在の解答状態とヒントを元に、
考えられるあらゆるパターンを計算し、
その統計を取って確定するセルを導くという方法だ。
確かに、この方法を使えば、確定できるセルは
漏れなく洗い出されるのは間違いない。
しかし、これもヒント数や解答欄の大きさによっては、
全パターンを洗い出すのに時間がかかりすぎると予想される。
ではどうするか。
セルを塗り潰しとして確定する方法は、
「セルが確実に塗り潰される」ことを確認するだけではない。
「セルが確実に空白にならない」ことを確認してもいいのだ。
そう、白黒のののぐらむの場合、セルは、
塗り潰されるか、空白になるかのどちらかしかないのだ。
このように、命題の解答が絞り込まれているときに、
非常に効果を発揮する手法がある。
それは、「帰謬法(背理法)」だ。