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

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


前言

因为最近在学习组合数学,里面有专门的一个章节是阐述拉丁方的来源、构造,欧拉提出了是否存在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,,n1},   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} [0110],012120201

二、乘法逆元构造法

设 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=ri+j(mod n) (i,j=0,1,,n1)
则 A 是   Z n \ Z_n  Zn上的n 阶拉丁方


三、两个低阶构造高阶法

在这里插入图片描述
在这里插入图片描述
首先,先用下面4行4列的数组代替 A 1 A_1 A1中的每一项 a i j 1 a^1_{ij} aij1
在这里插入图片描述

再按字典序将此数组内的序偶数与0到11的数进行一一对应,便由一个3阶和一个4阶的低阶拉丁方,生成了一个12阶的高阶拉丁方,对应关系如下:
在这里插入图片描述
在这里插入图片描述
A 1 A_1 A1 B 1 B_1 B1生成的12阶拉丁方如下:
在这里插入图片描述
A 2 A_2 A2 B 2 B_2 B2生成的12阶拉丁方如下:
在这里插入图片描述

总结

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

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值