第2講 局所リスト構造解析
第1話 リスト構造解析とは?
※第2講ではヒント数を20程度にするという前提で進めます。
ヒント数が多いとエラーしますし、
たまにヒント数19辺りでもエラーすることがあります。
エラーした場合は、終了を選んで下さい。
そのトラブルの解消は、第32講で行われます。
第23講 数独を解くソフトの開発においては、
リスト構造解析を全体リスト構造解析と部分構造解析の2つで考えていましたが、
第31講ではさらに、局所リスト構造解析という概念を加えたいと思います。
リスト構造解析とは難しい呼び名ですが、
実際に皆さんが数独(ナンプレ)を解いているときに、
常に行っている解析(分析)です。
例えば、オレンジのセル(ます)を考える際に、
1,2,3,4,5,6,7,8,9の中から、
行(横列をこのサイトでは行と呼びます)の条件から5,7を外します。
また、列(縦列をこのサイトでは単に列と呼びます)の条件から8,9,6,2を外します。
さらに、ブロックの条件から8(列の条件からすでに外されていますが),1を外します。
すると、オレンジのセルに入る数字候補(リスト)は、3,4,5のみとなります。
リスト=候補数字を考えることをリスト構造解析といっています。
正確には、集合{3,4,5}とその集合の要素数3(要素の3でなく、要素個数の3です)
をリスト構造解析と呼びます。
本来は集合{3,4,5}の中に要素の個数である3という概念は含まれていますが、
わざわざその集合の要素数3を加える訳は、
リストされている内容(候補数字)だけでなく、要素の個数3が重要な働きをするからです。
実際のプログラムでは
For i = 0 To 3-1
p(y(g), x(g)) = rlst(y(g), x(g), i)
のように使います。この場合は、
rlst(y(g), x(g), 0) = 3
rlst(y(g), x(g), 1) = 4
rlst(y(g), x(g), 2) = 5
とリストされています。
つまり、リストされる内容(候補数字)と候補数字の個数を分析して明らかにすることを
リスト構造解析といっているわけです。
そして、全セルについてリスト構造解析を行うことを全体リスト構造解析
ないしは全セルリスト構造解析と呼びます。
では、局所リスト構造解析とは何でしょうか。
それは、
空欄であった青いセルに例えば3を入れた場合に影響されるセルだけを
リスト構造解析することです。
では、部分リスト構造解析とは何でしょうか。
それは、すべての入力可能な数字について局所リスト構造解析をすることです。
3以外に4,6,8,9が入力可能です。
つまり、部分リスト構造解析とは、
3についての局所リスト構造解析
+
4についての局所リスト構造解析
+
6についての局所リスト構造解析
+
8についての局所リスト構造解析
+
9についての局所リスト構造解析
というわけです。
でも、数独(ナンプレ)を試行錯誤法
(もちろんこれは仮定法による解法ですから後にはこの方法は捨てます)
で解く場合には、
局所リスト構造解析のすべてを合わせたものが全体リスト構造解析なのだから、
局所リスト構造解析のみでよろしいのでは?
と思いになるでしょう。
ですが、
数独自動生成アプリ9×9・16×16・25×25統合版Ver.1(2017/03/16完成)
においては、部分リスト構造解析も使っています。
このアプリを開発するまでは、
局所リスト構造解析と全体リスト構造解析しか使っていませんでしたので、
局所リスト構造解析を部分リスト構造解析と呼んでいたのですが、
すべての入力可能な数字についても解析する必要があって、
1つの数字について行う解析を局所リスト構造解析
すべての入力可能な数字について行う解析を部分リスト構造解析と呼び直すことにしたのです。
尚、以下の記述ではリストという言葉を省略して
全体構造解析(全セル構造解析)、局所構造解析、部分構造解析
とする場合もあります。
eclipse c++ 入門
魔方陣 数独(ナンプレ)で学ぶ VBA 入門
数独(ナンプレ)のシンプルな解き方・簡単な解法の研究
vc++講義へ
excel 2013 2010 2007 vba入門へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座へ
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座へ
専門用語なしの C言語 C++ 入門(Visual C++ 2010で学ぶ C言語 C++ 入門)
専門用語なしの excel vba マクロ 入門 2013 2010 2007 対応講義 第1部
eclipse java 入門へ
excel 2016 vba 入門へ
小学生からエンジニアまでのRuby入門へ
本サイトトップへ