需要使用所需的属性构建大小为<?php
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType = pathinfo($target_file,PATHINFO_EXTENSION);
// Check if image file is a actual image or fake image
if(isset($_POST["submit"])) {
$check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
if($check !== false) {
echo "File is an image - " . $check["mime"] . ".";
$uploadOk = 1;
} else {
echo "File is not an image.";
$uploadOk = 0;
}
}
?>
的矩阵。
nxn
是偶数。 (作为算法的输入)n
到0
对于各种n-1
,需要任何一个可能的输出。
n
input
2
output
0 1
1 0
现在我想到的唯一想法就是以递归的方式强制构建组合并修剪。
如何以有效的迭代方式完成这项工作?
答案 0 :(得分:2)
IMO,您可以通过算法来处理您的答案:
如果acme-site.com
结果为:
8x8
您实际上有一个包含以下模式的两个0 1 2 3 4 5 6 7
1 0 3 2 5 4 7 6
2 3 0 1 6 7 4 5
3 2 1 0 7 6 5 4
4 5 6 7 0 1 2 3
5 4 7 6 1 0 3 2
6 7 4 5 2 3 0 1
7 6 5 4 3 2 1 0
矩阵的矩阵:
4x4
此外,每个m0 => 0 1 2 3 m1 => 4 5 6 7 pattern => m0 m1
1 0 3 2 5 4 7 6 m1 m0
2 3 0 1 6 7 4 5
3 2 1 0 7 6 5 4
都是两个4x4
矩阵的矩阵,其幂与2的幂相关:
2x2
在其他说明中,我应该说您有一个m0 => 0 1 m1 => 2 3 pattern => m0 m1
1 0 3 2 m1 m0
矩阵2x2
和0
,然后通过用新{替换每个单元格将其扩展为1
矩阵{1}}矩阵:
4x4
现在再次展开它:
2x2
我可以通过这个C#示例代码计算每个单元格的值:
0 => 0+2*0 1+2*0 1=> 0+2*1 1+2*1
1+2*0 0+2*0 1+2*1 0+2*1
result => 0 1 2 3
1 0 3 2
2 3 0 1
3 2 1 0
答案 1 :(得分:0)
我们知道每行必须包含每个数字。同样,每行包含每个数字。
让我们从0开始采用指数的CS约定。
首先,考虑如何将1放在矩阵中。选择一个随机数k0,从1到n-1。将1放在第0行的位置(0,k0)。在第1行中,如果k0 = 1,则在这种情况下已经放置了一个。否则,有n-2个自由位置并将1放在位置(1,k1)。以这种方式继续,直到放置所有1个。在最后一行中只有一个自由位置。
接下来,重复2,必须适合其余的地方。
现在的问题是我们可能无法真正完成广场。我们可能会发现有一些限制使得无法填写最后的数字。问题是检查部分填充的拉丁方是NP完全的。(wikipedia)这基本上意味着计算密集,并且不知道快捷算法。所以我认为你能做的最好就是生成正方形并测试它们是否有效。
如果你只想为每个n想要一个特定的方格,那么可能有更简单的方法来生成它们。 Ted Hopp在他的评论Latin Squares. Simple Construction中给出的链接确实提供了一种方法,用于生成一个以整数mod n加法开始的正方形。
答案 2 :(得分:0)
我可能是错的,但是如果您只想打印对称表,则是在映射到a的powerset({0,1,..,n})上与对称差运算表同构的拉丁方的特殊情况。响{0,1,2,..,2 ^ n-1}。
也可以使用XOR(i,j)
生成这样的表,其中i
和j
是n*n
表索引。
例如:
def latin_powerset(n):
for i in range(n):
for j in range(n):
yield (i, j, i^j)
打印元组来自先前定义的对称拉丁方格的特殊情况生成器:
def print_latin_square(sq, n=None):
cells = [c for c in sq]
if n is None:
# find the length of the square side
n = 1; n2 = len(cells)
while n2 != n*n:
n += 1
rows = list()
for i in range(n):
rows.append(" ".join("{0}".format(cells[i*n + j][2]) for j in range(n)))
print("\n".join(rows))
square = latin_powerset(8)
print(print_latin_square(square))
输出:
0 1 2 3 4 5 6 7
1 0 3 2 5 4 7 6
2 3 0 1 6 7 4 5
3 2 1 0 7 6 5 4
4 5 6 7 0 1 2 3
5 4 7 6 1 0 3 2
6 7 4 5 2 3 0 1
7 6 5 4 3 2 1 0
这涵盖了拉丁方的更多一般情况,而不是上面的琐碎代码具有的超对称情况: