gooブログはじめました!

写真付きで日記や趣味を書くならgooブログ

ナンプレについて卒業論文を書く

2016-10-09 08:42:20 | ブログ
 長い間、ナンプレ(数独)の問題を解いてきた。

 その間、常に念頭にあったのは、3×3ブロック、同一行または同一列に適用するアルゴリズムだけですべてのパズルが完結するのか、あるいは問題によっては二者択一の選択を介して試行錯誤するプロセスが必要になるのか、という問題である。

 そのため、特に難問とされている問題を選んで取り組んできたが、それほど多くの問題を試す機会もなかったので、この懸案が容易に解決するようにも思えなかった。

 最近、参考文献のようなナンプレの「超難問」と称する問題集があることを知ったので、そのうちの一冊を購入し、その中の100問をやってみた。

 100問の挑戦が終了した時点では、アルゴリズムだけで完結したものが85件、途中で二者択一の選択を一回だけ行い、失敗した場合にはもう一方の選択肢を介して完結したものが15件あった。

 その途中経過をみると、62件目が最後の試行錯誤となり、その後の問題については、アルゴリズムだけで完結したので、試行錯誤した問題については、アルゴリズムの適用が不完全であったと考えた。

 そこで、試行錯誤の15件をもう一度やってみた。その結果、100問すべてがアルゴリズムだけで完結できることを知った。

 この結果から、ナンプレはアルゴリズムの適用だけで100%完結できるのではないかと思うようになった。

 ここで、適用したアルゴリズムについて記しておきたい。

 まず準備段階として、問題の行列欄を拡大するために別の用紙にパズルを転写した後、各空欄に可能な数字列の候補を書き込んでいく。これら候補は、1~9の数字全体の部分集合になっている。

 適用したアルゴリズムは、次の通りである。

 (1)3×3ブロック、同一行または同一列の各々について、すべての部分集合の合併から外れた孤立した数字をもつ欄があれば、その欄はその数字に確定する。これによって、関連する各欄の部分集合からその確定した数字を消し込むことができる。
 (2)いずれかの3×3ブロック、同一行または同一列に、(1,4);(1,4)のように2つの要素だけが残った部分集合のペアに注目する。この2つの欄には、いずれにしても背反的に1か4しか入らないから、同3×3ブロック、同一行または同一列に存在する他の部分集合に含まれる1と4を排除することができる。
 (3)3×3ブロック内の同一行または同一列だけに、(3,4);(1,3,7)のように同一数字3が並んでいる場合には、いずれかの欄が3でなければならないから、問題全体の同一行または同一列中の3を排除できる。
 (4)3×3ブロックなどに、(4,7,8);(4,7,8);(4,8)のような組があるときは、(4,7,8)ペアの1つが7でないと矛盾するから、同3×3ブロック、同一行または同一列中の他の7を排除できる。また、(2)により、他の4と8も排除できる。同様に、(4,7,8);(7,8);(4,7)の組で、(4,7,8);(7,8)のいずれかが8でないと矛盾するので、他の8を排除できる。また、いずれが8であっても、4と7はこの組の中にあるので、他の4と7を排除できる。(7,8)の代わりに(4,8)があっても、同様である。
 (5)3×3ブロックなどに、(3,5,8);(3,5,8);(4,5,8);(4,5,8)の組があるときには、(3,5,8)ペアのいずれかが3でなければ矛盾が生じる。同様に、(4,5,8)ペアのいずれかが4でなければ矛盾が生じる。これから、関連する欄の3と4を排除できる。また、(2)により、他の5と8も排除できる。
 (6)3×3ブロック内の同行または同列に同じ数字が並び、その行または列を含む同一行または同一列に同数字がないとき、その行または列で同数字が確定するから、同3×3ブロック内の他の同数字を排除できる。
 (7)まれにしか生じないが、(4,5,7);(4,5,7);(4,5,7)のように3つの要素が残った同一部分集合のトリオについても、同3×3ブロックなどに存在する他の部分集合に含まれるこれらの数字を排除できる。同様に、(4,5,7,8);(4,5,7);(4,5,7,8);(4,5,7)のような(4,5,7,8)ペアの1つが8でなければならないことは明白である。

 次に、以上の結果の真偽を確かめるために、過去に遭遇した他の難問の記録をもう一度検討し直してみることにした。

 その結果、多くの問題を収録した問題集には、アルゴリズム偏向と言えるような偏りがあることを知った。それとともに、局所的なアルゴリズムの適用には限界があることも分かった。

 過去の難問の中で、局所的なアルゴリズムの適用だけではパズルが完結しなかったものが9件あった。

 そのうちの1件は、2013年8月1日付のブログで紹介した問題である。この問題に関しては、数字の1を含む部分集合がチェインを介して全体への波及効果が大きいことに注目し、1を含む部分集合のマップをつくり、二者択一の一方の1についてチェインの体系をたどると、1と1’(not 1)との組合せに矛盾が生じる。これから、選択した1は1’であることが導かれ、パズルが完結する。

 他の1件も二者択一であって波及効果の大きい数字4の部分集合を基点としてチェインの体系をつくるものである。ここでは、二者択一のいずれの4を基点としてもチェインの全体は矛盾なくつながる。しかし、両者の試みから複数個の4’が4の不動点となる。これから、これらの4’が確定する。4自身が不動点として確定する場合もあるだろう。

 残りの7件については、チェイン体系を利用することによって数字を確定させることが難しいので、波及効果の大きそうな数字を選び、二者択一の試行錯誤をして、成功か失敗かの結果を得た。この種の難問については、二者択一の選択と試行錯誤が最良の方法のようにみえる。もちろん、試行の途中でチェイン体系の利用に切り替えることもあり得る。

 ナンプレの問題で提示される数字の配列パターンには、局所的なアルゴリズムの適用が可能なものと、そうでなく、二者択一の試行錯誤が必要なものがあることが分かった。数字パターンのゆらぎの状態によって、いずれかのコースをたどることになるのであろう。

 参考文献
 川崎光徳著「超難問 ナンプレ Emperor145選」(永岡書店)

最新の画像もっと見る

コメントを投稿