2021-09-15

拉丁方(数独)的构造方法

文章目录


前言

因为最近在学习组合数学,里面有专门的一个章节是阐述拉丁方的来源、构造,欧拉提出了是否存在6阶的正交拉丁方问题,欧拉猜测:对应整数6、10、14、16、4k+2、…不存在相应阶数的拉丁方。早在1901年,Tarry就用枚举法验证了欧拉猜测的正确性。(1901年中国签订了《辛丑条约》,瑞典首次颁发诺贝尔奖)课本中也阐述了集中构造拉丁方的方法,现将这些方法做一个整理,以供大家参考。(版权侵删)

一、拉丁方的定义

  1. 设 n 为正整数,并设 A 为 n 个不同正整数元素的集合。在集合A上的 n 阶拉丁方是一个 n 行 n 列的数组,他的每一项是 A 的元素,使得 A 的 n 个元素的每一个元素在每一行上出现一次,在每一列上出现一次。
  2. 通常把 A 取为   Z n = { 0 , 1 , ⋯   , n − 1 } \ Z_n = \{0,1,\cdots,n-1\}  Zn​={0,1,⋯,n−1},   Z n \ Z_n  Zn​是指mod n 整数运算
    此时我们把拉丁方的行列计数为0,1,   ⋯ \ \cdots  ⋯,n-1,而不是我们经常用的1,2,   ⋯ \ \cdots  ⋯,n(1行1列的数组总是只有一个元素组成的拉丁方)
    以下为拉丁方例子: [ 0 1 1 0 ]   , [ 0 1 2 1 2 0 2 0 1 ] \begin{bmatrix} 0 & 1\\ 1 & 0 \end{bmatrix}\,, \begin{bmatrix} 0 & 1 & 2 \\ 1 & 2 & 0 \\ 2 & 0 & 1 \end{bmatrix} [01​10​],⎣⎡​012​120​201​⎦⎤​

二、乘法逆元构造法

设 n 是正整数,r 是   Z n \ Z_n  Zn​中的非零整数,是的 r 和 n 的GCD为 1。(即互为逆元)设A 为n 行n 列数组,其 i 行j 列上的元素是
a i j = r ∗ i + j ( m o d   n 运 算 )   ( i , j = 0 , 1 , ⋯   , n − 1 ) a_{ij} = r*i+j(mod\ n 运算) \ (i,j=0,1,\cdots,n-1) aij​=r∗i+j(mod n运算) (i,j=0,1,⋯,n−1)
则 A 是   Z n \ Z_n  Zn​上的n 阶拉丁方


三、两个低阶构造高阶法

2021-09-15
2021-09-15
首先,先用下面4行4列的数组代替 A 1 A_1 A1​中的每一项 a i j 1 a^1_{ij} aij1​
2021-09-15

再按字典序将此数组内的序偶数与0到11的数进行一一对应,便由一个3阶和一个4阶的低阶拉丁方,生成了一个12阶的高阶拉丁方,对应关系如下:
2021-09-15
2021-09-15
由 A 1 A_1 A1​和 B 1 B_1 B1​生成的12阶拉丁方如下:
2021-09-15
由 A 2 A_2 A2​和 B 2 B_2 B2​生成的12阶拉丁方如下:
2021-09-15

总结

以上就是生成拉丁方的方法,对于我们平常做的数独游戏,通常都是由以上两种方法构造出来的,关键点在于r的选择,不同的r构造出不同的拉丁方。解数独的精髓就是紧紧把握拉丁方的定义(即每行每列不会出现重复的元素),祝各位在数独路上收货快乐!

上一篇:21.4.21 t1


下一篇:manacher