Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何判断三维正方形是否为拉丁正方形_C++_Multidimensional Array_Latin Square - Fatal编程技术网

C++ 如何判断三维正方形是否为拉丁正方形

C++ 如何判断三维正方形是否为拉丁正方形,c++,multidimensional-array,latin-square,C++,Multidimensional Array,Latin Square,我需要设计一个算法来判断给定的整数矩阵是否是有效的拉丁方。我以前从未使用过拉丁语Sqares,所以我不知道从哪里开始。经过一些研究,我只找到了写拉丁方的算法。我唯一想到的是所有列和行的总和应该是相同的,但是我必须检查每个数字是否在同一行和列中重复。这样做的话,该计划将有很大的时间成本。我用的是C++。 这样做的话,该计划将有很大的时间成本 不,因为在你到达终点之前你可以拒绝很多矩阵。所以算法很快就会失败。工作算法的最差估计是O(n*(n+1))(假设您只计算维数为n*n的平方矩阵)。但平均算法会

我需要设计一个算法来判断给定的整数矩阵是否是有效的拉丁方。我以前从未使用过拉丁语Sqares,所以我不知道从哪里开始。经过一些研究,我只找到了写拉丁方的算法。我唯一想到的是所有列和行的总和应该是相同的,但是我必须检查每个数字是否在同一行和列中重复。这样做的话,该计划将有很大的时间成本。我用的是C++。 这样做的话,该计划将有很大的时间成本

不,因为在你到达终点之前你可以拒绝很多矩阵。所以算法很快就会失败。工作算法的最差估计是
O(n*(n+1))
(假设您只计算维数为n*n的平方矩阵)。但平均算法会好得多,因为它会失败,因为它是第一个发现等式的算法

更新: 平均复杂度可以粗略估计为实际拉丁方的数量与可能的方的数量之比。要做到这一点,我们需要引入理解
规范化
平方。下面的两个正方形直观上是相同的:

[ 1 2       [5 7
  2 1 ]      7 5]
为了规范化这个,我们可以用n*n平方的数字1…n来代替。所以第一种形式获胜

对于标准化正方形


你害怕吗?但对于平均值,我们还需要将这个公式除以矩阵的总数。要做到这一点,请参见此公式

您能告诉我们“大时间成本”版本吗?这会给我们一些帮助。我们能为你做的就是用谷歌搜索答案——你可以自己做的事情。如果没有一些代码来帮助您解决问题,那么就没有太多其他问题可供回答。您没有努力提出适当的问题:请提供您迄今为止的尝试,好吧,但我的问题是平均算法是什么,因为我在谷歌上搜索数独已经好几个小时了,但我仍然不知道该算法的原理是什么