我需要设计一种算法来判断给定的整数矩阵是否是有效的拉丁方。我之前从未与拉丁Sqares合作过,所以我不知道从哪里开始。经过一些研究,我只找到了编写拉丁方的算法。对我来说唯一的事情是所有列和行的总和应该是相同的但是如果它在同一行和列中重复,我必须检查每个数字。这样做,程序将花费大量时间。我正在使用C ++。
答案 0 :(得分:0)
这样做会使程序花费很多时间。
不,因为你可以在到达终点之前拒绝很多矩阵。因此算法会快速失败。工作算法的最差估计是O(n*(n+1))
(我假设你只评估尺寸为n * n的方矩阵)。但是平均算法会好得多 - 因为它会在首次发现平等时失败。
<强>更新强>
平均复杂度可以是粗略的并且近似估计为真实拉丁方的数量与可能的平方数。要做到这一点,我们需要介绍理解normalized
square。波纹管的两个方块直观相同:
[ 1 2 [5 7
2 1 ] 7 5]
因此为了规范化,我们可以使用n * n平方的数字1 ... n的替换。所以首先形成胜利。
对于标准化的正方形Wiki provides an estimation
你害怕吗?但是对于平均值,我们还需要将此公式除以矩阵的总数。为此,请参阅此公式http://en.wikipedia.org/wiki/Combination