readalps

全体数独题总解数问题再探

在上一篇(探究一个问题:全体数独题的总解数是多少?)里只对 S 的值做了上界估算,严格来说,还应对 S 的值做下界估算。另外,其中对 S 值的上界估算还是显著偏大,还可以做精确度更高的估算。

由于 H = S / (6! · 6!),以下尝试对 H 值,即如下 1R1B1C 数独题的总解数,做更高精确度的估算。

123 456 789
456 000 000
789 000 000
200 000 000
300 000 000
500 000 000
600 000 000
800 000 000
900 000 000

 考察第 2 行的空位,先看第三节,显然只能填 {1,2,3};再看第二节,显然只能填 {7,8,9},这样,第 2 行的 6 个空位整体会有 3! · 3! = 36 种可能(比上一篇里的 6! 的估算小很多)。选取其中一种,得到如下的 12R1B1C 型数独题的一个代表:

123 456 789
456 789 123
789 000 000
200 000 000
300 000 000
500 000 000
600 000 000
800 000 000
900 000 000

为避免占用太多的字母标记不同数独题的总解数而引起的混乱,以下用 ss(Q) 来表示数独题 Q 的总解数,ss 是 solution sum 的缩写。全空数独题记作 ALL0,于是有:

δ := ss(ALL0),S := ss(1R),H := ss(1R1B1C)

δ = 9! · S                        ①

S = 6!2 · H                      ②

H = 3!2 · ss(12R1B1C)     ③

② 和 ③ 这两个等式,实际上并没有给出严格的证明,后面再考察是否要把其中的 = 换成 ≈。

继续估算这个 12R1B1C 型数独题代表的总解数,考察第 3 行的空位,第二节只能填 {1,2,3},第三节只能填 {4,5,6},同样,第 3 行的 6 个空位整体会有 3! · 3! 种可能。选取其中一种,得到如下的 123R1C 数独题:

123 456 789
456 789 123
789 123 456
200 000 000
300 000 000
500 000 000
600 000 000
800 000 000
900 000 000

并有:

H = 3!2 · ss(12R1B1C) = 3!4 · ss(123R1C)   ④

继续估算 123R1C 的总解数,考察第 2 列的空位,先看第三节,这一节是第 2 列和第 7 宫的共同部分,由于

{2,5,8} ∪ {6,8,9} = {2,5,6,8,9}

这一节能填值的集合为 {1,3,4,7},而且 3 必需填在这一节(第 2 列的第二节也属于第 4 宫,且第 4 宫已经有 3),先填 3,有 3 种可能,再填另两个位置,有 3 · 2 中可能,即第 2 列第三节整体有 3 · 3 · 2 = 18 种填值可能。这时第 2 列第二节要填 6 和 9,以及 {1,4,7} 中填完第三节后剩下的那个数,即第二节有 3! 种填值可能。所以,第 2 列的 6 个空位整体有 18 · 3! = 3 · 3!2 种填值可能。选取其中一种,作为 123R12C 型数独题的代表,如下所示:

123 456 789
456 789 123
789 123 456
260 000 000
390 000 000
570 000 000
630 000 000
810 000 000
940 000 000

此时有:

H = 3!4 · ss(123R1C) = 3 · 3!6 · ss(123R12C)  ⑤

接着考察 123R12C 型数独题的这个代表,依次考察第 4 宫和第 7 宫,等效于考察第 3 列,可知第 3 列的第二节可填值为 {1,4,8},第 3 列的第三节可填值为 {2,5,7},且都可以独立选值,因此,第 3 列的 6 个空位整体有 3! · 3! 种取值可能。选取其中一种,作为 123R123C 数独题的代表,如下所示:

123 456 789
456 789 123
789 123 456
261 000 000
394 000 000
578 000 000
632 000 000
815 000 000
947 000 000

此时有:

H = 3 · 3!6 · ss(123R12C) = 3 · 3!8 · ss(123R123C)   ⑥

接着考察 123R123C 数独题的这个代表,来看第 5 行,[5,5] 和 [5,8] 两个空位的填值只能选自 {1,6,7} ...慢着!此时剩余的空位并不多,可以考虑直接用 SudokuSolver 2.5 求解,具体如下:

D:\read\num\Release>sudoku.exe

Order please:
load-quiz s.txt
Quiz loaded.

Order please:
show
123 456 789
456 789 123
789 123 456

261 000 000
394 000 000
578 000 000

632 000 000
815 000 000
947 000 000

Order please:
runrun 10000
...
17682) No more solution (solution sum is 2600).
Run-run time: 1091 milliseconds; current solutions: 2600
 steps: 0 # 0 # 17682
 total solutions: 0 # 0 # 2600.

Order please:

总解数为 2600 个。于是由 ⑥,有

H = 3 · 3!8 · ss(123R123C) 

   = 3 · 1679616 · 2600 = 13,101,004,800

再由 ②,有

S = 6!2 · H

   = 7202 · 13,101,004,800

   = 6,791,560,888,320,000

 这里的 H 和 S 的估值比上一篇里的估算值小多了。还用 2 秒一万的速度计算,一天是 4.32 亿

13,101,004,800 / 432,000,000 = 30.3264 天

这是直接求 H 值大约需要的时间。这样看,上一篇里的估算(2.75 亿年)太离谱了。

比较这一组数:

                           H = 13,101,004,800

                          232 = 4,294,967,296

                    S = 6,791,560,888,320,000

             264 = 18,446,744,073,709,551,616

   δ = 9! · S = 2,464,521,615,153,561,600,000

 296 = 79,228,162,514,264,337,593,543,950,336

 可以看到,H 刚超出 232 的界限,是 232 的 3 倍左右;而 S 没有超出 264;δ 也没有超出 296

本篇里黄色标注的等式都没有经过严格证明,现在来具体分析一下。

 

分类:

数学

技术点:

相关文章: