/*
数独知多少
如图是一个已经完成的数独,图中每一行,每一列和九个3*3的小矩阵都没有重复的数字出现。
下图是另一个填好的数独。
问题:
一共有多少种不同的数独解答呢?其中有多少种是独立的解答呢?
如果我们要用一个简单的字符串来表示各种数独,例如"125864...685219",如何保证一一对应的基础上,让字符串的长度最短?
独立的解答到底是什么?如何定义独立这种关系。
如果任意交换数独的两个数字,仍然是一个合法的数独。
定义:如果两个数独的解答可以通过交换任意两个数字,而仍然是合法数独,那么他们就不是独立的。
每个数独解答都可以通过上述转化,而转化为标准型:
1 2 3
4 5 6
7 8 9
不考虑是否独立的情况下,一个空的数独有N个解答,考虑了上述的等价关系之后,独立的解答数目应该是N/(9!),因为一共有9!种放法。
关于解答的总数,面试者其实是想要一个近似的答案。如果能够在短时间通过分析,把大问题分解为若干子问题,然后推导出答案的上界和下界。
展示探索方法:记录数独的9个字块标记如图所示:
[ ][ ][ ]
[ B1 ][ B2 ][ B3 ]
[ ][ ][ ]
[ ][ ][ ]
[ B4 ][ B5 ][ B6 ]
[ ][ ][ ]
[ ][ ][ ]
[ B7 ][ B8 ][ B9 ]
[ ][ ][ ]
称B1,B2,B3组成一个块行,如果一个解使得块行内每行每块都恰好包含1到9这9个数字,则称该解为一个块行解;
B1,B4,B7组成一个块列, 列 列
首先讨论有多少组"块行解"。假设B1是标准型,一旦我们能得到一个基于B1“标准型”的块行解,我们就能够通过1到9的置换得到另一个“块行解”,
显然这样的置换9!个,如果机遇B1标准型的块行解有N个,总共有9!*N个。
下面讨论机遇B1标准型的块行解的个数。B2和B3第一行的构成有两种可能性,有B1的第二行或第三行构成(纯粹型),或者由B1第二行第三行混合构成
(混合型)。每一行中的3个元素都可以任意交换,并且B2和B3位置也可以互换,所以共有2*(3!)^6
其中a,b,c表示1,2,3所在位置,a可以是1,2,3中的任何一个数,每一行中的3个元素都可以任意交换,B2和B3位置可以交换,此外B2和B3的第一行一共有如下
9种可能性。
因此共有9*3*2*(3!)^6种
综上:总数 = 纯粹型 + 混合型 = 9!*2*(3!)^6 + 3*2*9*(3!)^6 = 948 109 639 680
满足每个子块都是由1到9填充的解共有N=(9!)^9.
又因为九宫格内有3个块行,满足每行每块都由1到9填充的解共有M=948 109 69 680^3种
满足块行限制解在此满足块限制解中所占的比例为k = M/N,假设两个比例互相独立,则同时满足块行列限制解在满足块限制解中所占的比例为k^2,
因此同时满足块行列限制的解(即九宫格的解)总数约为N*K^2 = 948 109 639 680^6/(9!)^9 ~ 6.67*10^21
这个没看懂,
如果现在有一个数独答案,怎么记录>
最直接方法:从上到下,从左到右记录每一个数字。
每个数字用一个char来存储的话需要81个字节,如果用4bit表示一个数字,需要40.5字节。
我们只需要记录数独左上方:8*8方阵中的64个数字,其他17个数字必然可以从这64个数字中推出来,牛逼
,这样我们还使用上述简单编码,只需要几楼呀32字节。
完整版:
[1 2 3 ][4 5 6 ][7 8 9 ]
[4 5 6 ][7 8 9 ][1 2 3 ]
[7 8 9 ][1 2 3 ][4 5 6 ]
[2 3 4 ][5 6 7 ][8 9 1 ]
[5 6 7 ][8 9 1 ][2 3 4 ]
[8 9 1 ][2 3 4 ][5 6 7 ]
[3 4 5 ][6 7 8 ][9 1 2 ]
[6 7 8 ][9 1 2 ][2 4 5 ]
[9 1 2 ][3 4 5 ][6 7 8 ]
存储的是:
12345678
45678912
78912345
...
67891234
还有其他方法可以进一步压缩空间,例如每一个数字(1~9)用4个位就可以表示,如果12是向量两个数字,它们可以当做整数"12"不造成歧义,两个数字才4bit。
最少需要多少空间,问题的下界是多少?
不考虑等价的情况下有,6.7*10^21个不同的数独,我们使用k bit空间,最多能表示2^k种不同的数独,那么我们需要的最少空间至少要:
2^k >= 6.7 = 10^21,k>73,约8字节
*/
编程之美:第四章 数字之趣 4.9数独知多少
原文作者:天地一扁舟
原文地址: https://blog.csdn.net/qingyuanluofeng/article/details/47187977
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
原文地址: https://blog.csdn.net/qingyuanluofeng/article/details/47187977
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。