1. 引言
数独作为一种富有逻辑性的数字填充游戏,具有非常好的益智效果,而且它在数学上也有着很长的历史,它最早起源于18世纪,以瑞士的数学家欧拉等人研究的拉丁方阵为开端;19世纪80年代之后,在美国得到进一步发展;于1984年被引入日本并且迅速流行起来;2004年,数独游戏登上英国泰晤士报,随后广为流传;数独在2007年被引入中国大陆之后也得到了良好的发展,许多数学学者也对数独问题进行了更深的思考,并给出了一些解决数独问题的数学模型和解法。
目前求解数独的方法主要分为两类,一类是以人的逻辑为依据,通过观察比较来寻找数独的解;另一种则是基于计算机回溯法的暴力解法。为了方便叙述和计算,本文以
的数独问题为例,根据数独问题的特点,通过建立多项式方程组将求解数独问题转化为求解多项式方程组零点的问题,我们将用不可约特征序列的方法求解多项式方程组。不可约特征序列是由王东明在吴特征列的基础上进一步通过因子分解而得到的三角系统,以多项式的零点集为主要关注点,给出原多项式方程组的解的结构。
2. 数独问题的多项式表示
四宫数独是一般九宫数独问题的简化版本,要求在
的16个格位内分别填入
四个数字中的一个,使得每行、每列、每个宫内的数字都不相同。用多项式方程组表示数独问题的方法有很多种,此处我们主要介绍一种与图论中染色问题相似的一种方法 [1] 。我们将待填数的格位看作是图中待染色的点,需要填的
四个数字看作是四种不同的颜色,每行、每列、每宫内不能填相同数字的格位则看作是不能染相同颜色的点,它们之间由边相连。这样,我们就可以用类似图论染色问题中构建多项式的方式建立多项式方程组来描述数独问题了。
Figure 1. Shidoku puzzle without clues
图1. 无提示数的四宫数独问题
用多项式方程组表示无提示数四宫数独问题的步骤如下:
1) 如上图1设出16个变量
,分别表示16个格位,用有限域
中的四个元素
分别表示要填的四个数字(注:选择在有限域
中进行计算,是因为我们所应用的计算软件Singular分别用
这11个元素来表示
(其中p为素数)中个元素,
是使
包含数字1,2,3,4的最小的素数了,为了读写方便,所以选择在
中进行计算。);
2) 写出表示格位取值的16个多项式:
;
3) 若格位
和格位
处不能填相同的数字,则用
来表示,这样的方程共有56个,分别用来表示每行、每列、每宫内的格位中所填数字不能相同。
这样我们就用包含72个多项式的方程组将四宫数独问题表示了出来。对于有提示数的数独问题,若格位
处有提示数n,则用多项式
替换掉原来的
即可。
3. 吴特征列与不可约特征序列
本节主要介绍一些有关吴特征列和不可约特征列的基础知识,其详细内容可以阅读文献 [2] 和文献 [3] 的相关部分。
设
是一个数域,F是多项式环
(默认变元序为
)中的一个多项式。我们定义,多项式F中所含的变元的最大下标
为F的类,如果
则规定
。当
时,把
称为是F的导元;把
称为F的导次数;把
称为F的初式。
定理3.1
设
是多项式环
中的任意两个多项式,
是一个变元,而且有
,
。如果
,那么就存在多项式
和整数
使得
,而且有
。如果s固定,那么
是唯一确定的。证明参见 [3] 。
定义3.2
如果定理3.1中的条件可以被满足,那么称表达式
为F关于G的伪余公式,称Q为F对G关于
的伪商,记为
,称R为F对G关于
的伪余式,记为
。
定义3.3
如果
中的有限非空有序集合
满足条件
,那么我们就将
称为是一个三角列,为了方便起见,我们也把空集合称为是一个三角列。
对于多项式集合
,记
,
。对于
,记
,
,类似地定义
,
,
。
设
是非零多项式。并且有
。如果
。那么就称P对Q是约化的。设多项式集合
是一个三角列,
是任意多项式,如果P对
中的每一个多项式T都是约化的,那么称P对
是约化的。
定义3.4
如果多项式集合
只包含一个非零常数,则称
为平凡升列;否则,若
是三角列,且对于任意
,
对于所有
都是约化的,就称
为非平凡升列。
定义3.5
在三角列
中,若对于任意
都有
成立,其中
,则称
是良好三角列。
定义3.6
设
是非空多项式集合,任意包含于由
所生成的理想的升列都称为
的中间列。
定义3.7
设
是非空多项式集合,如果存在升列
使得
而且
,那么就称
为
的特征列。
命题3.8 (特征列的零点关系)
设非平凡升列
是多项式集合
的特征列,设
,
。有如下的零点关系:
,
,
。
定义
中多项式P的秩为
,如果
;否则的话定义P的秩为P,记为
。
定义3.9
设
是非零多项式,如果满足下列三个条件之一,则称P的秩低于Q的秩,记为
:1)
,但是
;2)
,而且
;3)
,
,而且
。如果
,则称P的秩高于Q的秩,记为
。如果
和
都不成立,那么称P和Q具有相同的秩,记为
。把
或
简记为
。
定义3.10
设
和
是多项式环
中的两个非平凡升列,称
的秩低于
的秩,记为
,如果满足下列条件之一:1) 存在
,使得对于每个
都有
,但是
;
2)
,而且对于每个
都有
成立。如果
,那么称
的秩高于
的秩,记为
。如果
和
都不成立,那么称
和
具有相同的秩,记为
。将
或者
简记为
。并规定平凡升列的秩总是低于非平凡升列的秩。
引理3.11
设
和
是多项式环
中的两个升列,那么我们有下列结论成立:(1)
当且仅当
而且对于所有
,都有
成立;(2)设
,并记
,如果
是非平凡升列,并且P对于
是约化的,那么
。
定义3.12
对于多项式环
中任意非空有限的多项式集合
,设
是由所有含于
的升列组成的集合。因为一个非零多项式可以构成一个升列,所以
非空。我们将
的任意极小升列(关于
秩最低的升列)称为是
的基列。
的基列可以通过如下步骤找出:设
,令
是
中秩最低的多项式。如果
是非零常数,那么
就是
的一个基列。否则,令
。如果
,那么
就是
的一个基列。否则,设
是
中秩最低的多项式。易知
。可以类似地依次构造
,因为
是非空有限的多项式集合,而基列或是一个非零常数,或是作为一个三角列最多含有n个多项式,所以上述构造过程必定会在有限步之后终止,最后我们就可以得到
的一个基列。
的吴特征列的算法如下:1) 设
,
;2) 如果集合
非空,则求取
的一个基列
;3) 若
中含有
中的元素,则另
,否则另
;4) 另
,并返回第2)步,直到集合
为空集为止。最后一次求出的基列
即为多项式组
的吴特征列。该算法的终止性及正确性可参见 [3] 。
设非平凡升列
是多项式集合
的特征列,现在回到特征列的零点关系,即
,显然有
,于是,计算每一个
的特征列,并如此进行下去,由于
的基列的秩低于
的秩,所以经过有限多步之后可以得到如下的零点分解
,其中
都是升列,
。
定义3.15
设
为
中由升列
构成的有限集合,
为
中的多项式集合,如果有零点分解
成立,且
对于所有的i成立,则称
为
的特征序列。
即
也即
。
设
是一个三角列,则
可以写成如下形式:
,
其中
,
,
,
。进一步地,将导元
重新命名为
,其它变元记为
或简记为
,则
就可以写作
。设
是
添加
后得到的超越扩域
,如下对三角列
的不可约性和一般零点作归纳定义。
定义3.16
设
是良好三角列,若
只含一个多项式
,且
是
中的不可约多项式,则称
是不可约的。此时,设
为
在
的某一代数扩域中的零点,则称
为
的一个一般零点。假设含任意
个多项式的良好三角列之不可约性和一般零点已经定义,那么称良好三角列
是不可约的,如果
是不可约的,且以
为一般零点,且多项式
在
中不可约。其中
是将
添入
得到的代数扩域。此时设
为
在
的某个代数扩域中的零点,称
为
的一个一般零点。
定理3.17零点分解定理
设多项式组
有中间列
,其中
,
,
。如果
可约,则存在k,使得
可以分解为不可约多项式
——即存在非负整数
和
中的多项式
以及
中的多项式D,使得
成立——于是有下面的零点分解成立:
,其中
,
。
仿照求解特征序列的过程,可以对每个
以及
进一步求其零点分解,最终会得到形如
的零点分解,其中
且每个
都不可约。设
是一个特征序列或三角
序列,若
中的升列都不可约,则称
是不可约的。求解任意非空多项式方程组的不可约特征序列主要是在求解吴特征列算法的基础上用因子分解方法将吴特征列中可约的多项式在相应的代数扩域上进行因式分解,从而得到不可约特征序列。详细算法以及相应的因子分解算法详见文献 [2] 的4.4节及9.4节。
4. 应用及结论
对于有唯一解的数独问题,我们可根据本文第二部分给出的建模方法,用有限域
上的72个多项式进行表示,即表示16个格位取值的多项式
以及56个表示每行、每列、每宫内的格位所填数字不同的多项式
,这72个多相似构成一个多项式组,之后我们求解出该多项式组的不可约特征序列,即可解出该多项式组的零点集,也就解出了相应的数独问题。直观地,我们有如下结论:
命题4.1 数独问题有解当且仅当多项式方程组的不可约三角分解不为{1}。
命题4.2 数独问题有唯一的解当且仅当多项式方程组的不可约三角分解只包含一个三角列
,其中
。此时数独问题的解即第i个格位处填数字
。
命题4.3 如果多项式方程组的不可约三角分解包含多个三角列,则原数独问题有多个解。此时,每个三角列都具有形式
(其中
),分别代表数独的一种解,不可约特征序列种包含多少个三角列,原数独问题便有多少种解。
在求解多项式组的不可约特征序列时,我们主要用到的计算软件为Singular,在Singular中有内置函数“
”,可以直接求解出多项式组I在给定数域中的不可约特征序列,关于软件Singular的更多内容见 [4] 。
例4.1 以下图2四宫数独为例:
我们可以用多项式方程组来表示它。首先用
表示16个格位的取值,然后用
(共56个)表示每行、每列、每宫内的格位取值不能相同,最后,由于本题中给定了第2、8、11、13个格位的提示数分别为4、1、3、2,所以分别用多项式
替换掉
,这样我们就用72个多项式将该数独问题描述出来了。之后求解由这72个多项式方程构成的多项式方程组的不可约特征列,结果为:
,该不可约特征序列只包含有一个三角列,即原多项式组只有唯一解,也即原四宫数独只有唯一解,其解即如该三角列所示。
例4.2 若是如图3所示的一个没有任何提示数的空白四宫数独问题,
Figure 3. Shidoku puzzle without clues
图3. 无提示数的四宫数独问题
我们构建的多项式组即为
,由72个多项式组成,计算其不可约特征序列,结果为由288个三角列构成的不可约特征列,其中每一个三角列都形如例4.1中的结果,分别表示数独问题的一种可能的解,也就是说,空白的四宫数独问题一共有288种不同的解,这与我们运用组合数学进行求解的结果是一致的。
此外,在文献 [5] 中,Stephen Lucas等人用求解多项式组的Groebner基的方法处理了由类似的多项式方程组所生成的理想,同样得到了无提示数的四宫数独问题有288种解的结论。对于一般的九宫数独问题来说,也可以用类似的多项式来表示,Gago-Vargas等人在文献 [6] 中对九宫数独问题进行了详细的讨论,并用Groebner基成功求解出有大量提示数的数独问题。值得指出的一点是,想要将无提示数的九宫数独问题表示出来需要用到81个变量和891个多项式,不论对于Groebner基来说还是吴特征列方法来说都是非常巨大的计算量,远远超出了一般个人电脑的计算能力,不过通过这个方法,我们可以用多项式将数独问题的结构进行表示,吴方法的应用也为数独问题提供了一种多项式组解法的新思路。