拉丁方阵
数学定理
拉丁方阵(英语:Latin square)是一种 n × n 的方阵,在这种 n × n 的方阵里,恰有 n 种不同的元素,每一种不同的元素在同一行或同一列里只出现一次。
相关历史
据说普鲁士的腓特列大帝曾组成一支仪仗队,仪仗队共有36名军官,来自6支部队,每支部队中,上校、中校、少校、上尉、中尉、少尉各一名。他希望这36名军官排成6×6的方阵,方阵的每一行,每一列的6名军官来自不同的部队并且军衔各不相同。令他恼火的是,无论怎么绞尽脑汁也排不成。
后来,他去求教瑞士著名的大数学家欧拉。欧拉发现这是一个不可能完成的任务。
来自n个部队的n种军衔的n×n名军官,如果能排成一个正方形,每一行,每一列的n名军官来自不同的部队并且军衔各不相同,那么就称这个方阵叫正交拉丁方阵。欧拉猜测在
n=2,6,10,14,18,…
时,正交拉丁方阵不存在。然而到了上世纪60年代,人们用计算机造出了n=10的正交拉丁方阵,推翻了欧拉的猜测。现已经知道,除了n=2,6以外,其余的正交拉丁方阵都存在,而且有多种构造的方法。
标准型
当一个拉丁方阵的第一行与第一列的元素按顺序排列
同型类别
许多对于拉丁方阵的运算都会产生新的拉丁方阵。例如说,交换拉丁方阵里的行、交换拉丁方阵里的列、或是交换拉丁方阵里的元素的符号,都会得到一个新的拉丁方阵。交换拉丁方阵里的行、交换拉丁方阵里的列、或是交换拉丁方阵里的元素的符号所得的新的拉丁方阵与原来的拉丁方阵称为同型(isotopic)。同型(isotopism)是一个等价关系,因此所有的拉丁方阵所成的集合可以分成同型类别(isotopic class)的子集合,同型的拉丁方阵属于同一个同型类别,而不属于同一个同型类别的拉丁方阵则不同型。
正交拉丁方阵
定义
设有两个阶数相同(为)的拉丁方阵,其中将所有放置位置相同的元素组合成一个元组,组合成一个新的矩阵。 当这个新的矩阵中每一个元素互不相同时,拉丁方阵和是互相正交的。 此时,和即为一对正交拉丁方。 而在阶数固定的情况下,所有两两正交的拉丁方所成的集合称为正交拉丁方族。
构造
请你造一个n=4的正交拉丁方阵。
如果你有扑克牌,请用四种花色(梅花,方块,红心,黑桃)的1(即A)、2、3、4共16张牌,将它们排成4×4的方阵,每一行,每一列四种花色俱全,并且都有1、2、3、4。
特点
仔细欣赏一下,除了每行每列都有1、2、3、4,而且花色齐全。另外,这个图还有许多特点:
1. 一条对角线(从左上到右下)上全是4,另一条对角线(从右上到左下)上全是A。
2. 方块与梅花是左右对称的,红桃与黑桃也是左右对称的。就是说,如果沿中间的竖线将图对折,方块与梅花相合,红桃与黑桃相合。
3. 方块与黑桃,梅花与红桃上下对称。就是说,如果沿中间的横线将图对折,方块和黑桃相合,梅花与红桃相合。
4. A与4,2与3左右对称。
5. 两条对角线上四种四种花色齐全。
6. 方块与红桃中心对称,黑桃与梅花中心对称,就是说,如果将图形绕中心(图中横线与竖线的点)旋转180°,左上的方块与右下的红桃相合。
上图是另一种4阶(n=4)的正交拉丁方阵,请同学们自己欣赏,发现一些规律和特点。
学习数学,应当注意欣赏数学的美:整齐、对称、有规律、简单、自然…会欣赏数学的美才能将数学学的更好;学好了数学,也就提高了对数学美的认识。
正交拉丁方
定理
若n阶拉丁方存在r个两两正交的拉丁方,那么。
应用
当该定理中的等号成立时,则该阶正交拉丁方族被称为完全的。 可以分析得到,当n为1时,只存在一个拉丁方,当n为2时,不存在正交拉丁方族。 此外,当n为6时,也不存在正交拉丁方族,这个结论是通过对三十六军官问题的尝试得到的。 三十六军官问题指的是是否有一个解决方案使得来自6个不同地区的6个不同军衔的军官排成的方阵,其中每一行每一列的军官都来自于不同的地区且具有不同的军衔。 而该问题的方案即为6阶正交拉丁方的个数,该问题于1901年被Gaston Tarry证明为无解。 除了上述三种情况外,当阶数小于等于8时,均存在有n-1个正交的拉丁方。
如当n=3时,存在两个正交的拉丁方。 当阶数更多时,可以通过正交拉丁方表得到正交拉丁方族。
判断拉丁方阵
拉丁方阵是一种n×n的方阵,方阵中恰有n种不同的元素,每种元素恰有n个,并且每种元素在一行和一列中 恰好出现一次。著名数学家和物理学家欧拉使用拉丁字母来作为拉丁方阵里元素的符号,拉丁方阵因此而得名。例如下式是一个3×3的拉丁方阵:
如果一个拉丁方阵的第一行和第一列按照元素的先后顺序来排列,那么这称为拉丁方阵的标准型,例如下式就是一个3x3的拉丁方阵标准型,第一行和第一列都是”1 2 3”。
C语言
//t=0时,不是拉丁方阵
//t=1时,是拉丁方阵
//t=2时,是标准型拉丁方阵
#include
#include
int a[101][101],b[101][101],c[101][101];
#define clr(x) memset(x,0,sizeof(x))
int main()
{
int n,i,j,k,t;
{
t=1;k=1;
clr(a);clr(b);clr(c);
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
b[i][a[i][j]]++;
c[a[i][j]][j]++;
}
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
if(b[i][j]!=1||c[i][j]!=1)
{t=0;break;}
}
/*判断是否是标准型*/
if(t){
for(i=1;i<=n;i++)
if(a[1][i]!=i||a[i][1]!=i)
{k=0;break;}
if(k)t=2;
}
}
}
构造 NXN 阶的拉丁方阵(2<=N<=9),使方阵中的每一行和每一列中数字1到N只出现一次。如N=4时:
1 2 3 4
2 3 4 1
3 4 1 2
4 1 2 3
*问题分析与算法设计
构造拉丁方阵的方法很多,这里给出最简单的一种方法。观察给出的例子,可以发现:若将每 一行中第一列的数字和最后一列的数字连起来构成一个环,则该环正好是由1到N顺序构成;对于第i行,这个环的开始数字为i。按照 此规律可以很容易的写出程序。下面给出构造6阶拉丁方阵的程序。
*程序说明与注释
#include
#define N 6 /*确定N值*/
int main()
{
int i,j,k,t;
for(j=0;j
{
for(i=0;i
{
t=(i+j)%N; /*确定该拉丁方阵第i 行的第一个元素的值*/
for(k=0;k
}
}
}
*运行结果
The possble Latin Squares of order 6 are:
1 2 3 4 5 6 2 3 4 5 6 1 3 4 5 6 1 2
2 3 4 5 6 1 3 4 5 6 1 2 4 5 6 1 2 3
3 4 5 6 1 2 4 5 6 1 2 3 5 6 1 2 3 4
4 5 6 1 2 3 5 6 1 2 3 4 6 1 2 3 4 5
5 6 1 2 3 4 6 1 2 3 4 5 1 2 3 4 5 6
6 1 2 3 4 5 1 2 3 4 5 6 2 3 4 5 6 1
4 5 6 1 2 3 5 6 1 2 3 4 6 1 2 3 4 5
5 6 1 2 3 4 6 1 2 3 4 5 1 2 3 4 5 6
6 1 2 3 4 5 1 2 3 4 5 6 2 3 4 5 6 1
1 2 3 4 5 6 2 3 4 5 6 1 3 4 5 6 1 2
2 3 4 5 6 1 3 4 5 6 1 2 4 5 6 1 2 3
3 4 5 6 1 2 4 5 6 1 2 3 5 6 1 2 3 4
参考资料
最新修订时间:2024-06-13 15:52
目录
概述
相关历史
参考资料