生成对角拉丁方矩阵的算法

标签 algorithm math matrix

我需要为给定的 N 创建 N*N 矩阵,该矩阵在行、单元格、次要和主要对角线中没有重复,并且值为 1、2、3、....、N。

对于 N = 4,其中一个矩阵如下:

 1 2 3 4 
 3 4 1 2 
 4 3 2 1
 2 1 4 3

最佳答案

问题概述

您描述的数学结构是对角拉丁方。构建它们是比算法或程序更数学的问题。

要正确理解它是什么以及如何创建,您应该阅读以下文章:

  1. Latin squares definition

  2. Magic squares definition

  3. Diagonal Latin square construction <-- p.2 是对你的问题的回答,有证据和其他有趣的属性

简答

构造对角拉丁方的可能方法之一:

N 是所需矩阵L 的幂。

如果[0; 范围内存在数字AB; N-1] 满足属性:

  • A 相对于 N

  • BN

  • 互质
  • (A + B)N

    互质
  • (A - B)N

  • 互质

然后您可以使用以下规则创建所需的矩阵:

L[i][j] = (A * i + B * j) mod N

关于生成对角拉丁方矩阵的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33065138/

相关文章:

python - 什么时候使用浮点运算计算上限整数log2会失败?

matrix - 如何在 Erlang 中将列表的列表相乘?

MATLAB - 用子矩阵创建矩阵

algorithm - 为什么埃拉托色尼筛法比简单的 "dumb"算法更有效?

javascript - 以 10 为基数四舍五入

php - 将 N 名员工安置在具有角色的 M 个职位的算法

c++ - c++ 中的 LU 分解不适用于大矩阵

algorithm - 汉诺塔变异的高效算法

c - 检查字符串是否旋转回文的有效方法

algorithm - 最小平铺顺序