魔术方块,第2部分,算法

魔术方块奇怪的顺序由MATLAB生成的显示模式,增加元素通常对角,向右移动。

内容

三个案例

使用的算法MATLAB生成魔术方块n分为三种情况:
  • 很奇怪,n是奇数。
  • doubly-even,n能被4整除。
  • singly-even,n能被2整除,但不是除以4。

奇怪的顺序

最著名的算法生成魔术方块奇怪的秩序是de La Loubere的方法。西蒙de La Loubere是法国大使在17世纪晚期暹罗。我有时把他的方法称为“东北风算法”,冬季风暴后,新英格兰海岸向东北移动。你可以看到如果你遵循整数按顺序通过的原因魔法(9)
47 58 69 80 1 12 23 34 45 57 68 79 9 11 22 33 44 46 67 78 8 10 21 32 43 54 56 77 7 18 20 66年42 53 55 31日6 17 19 30 41 52 63 65 76 16 27 29 40 51 26 28 39 50 62 64 75 61 72 74 4 15 36 38 49 60 71 73 3 14 25 37 48 59 70 81 2 13 24 35
从1美元整数n ^ 2美元沿着对角线插入,从第一行的中间,向东北方向。当你离开一个数组,你做第一步,继续从相反的边缘。当你碰到一个细胞已经占领了,掉下来一行并继续。我们使用这个算法在MATLAB很多年了。这是代码。
一个= 0 (n, n);i = 1;j = (n + 1) / 2;k = 1: n ^ 2 =我;js = j;(i, j) = k;i = n -快速眼动(n +我,n);j =快速眼动(j n) + 1;如果一个(i, j) ~ = 0我=快速眼动(n) + 1;j = js; end end
一个大困难这个算法,产生的程序是它插入元素一次————不能矢量化

一种新的算法

几年前,我们发现了一种算法用于生成相同的奇怪的魔术方块de La Loubere顺序的方法,但是只有四个MATLAB矩阵运算。
(I, J) = ndgrid (1: n);=国防部(I + J + (n - 3) / 2, n);B =国防部(I + 2 * j2, n);M = n * A + B + 1;
让我们看看这是如何工作的n = 5。该声明
(I, J) = ndgrid (1: n)
产生两个矩阵的元素是行和列指标,j
I = 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 4 4 4 4 4 5 5 5 5 5
J = 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5
使用这些指标,我们生成两个矩阵。的语句
=国防部(I + J + 1, n) B =国防部(I + 2 * j2, n)
生产
4 = 3 0 1 2 4 0 1 2 3 0 1 2 3 4 1 2 3 4 0 0 1 2 3 4
B = 1 3 0 2 2 4 2 4 1 3 0 3 0 4 1 4 1 3 0 2 0 2 4 1 3
这两个一个B羽翼未丰的魔术方块。他们有相同的行,列和对角线。但是他们的元素不是整数从1美元到$ n ^ 2美元。每个人都有重复的元素$ 0 $和n - 1美元之间。最后的声明
M = n * A + B + 1
产生一个矩阵的元素之间的整数1 n ^ 2美元和美元相等的行,列和对角线。什么不是很明显,但是是真的,没有重复。所以必须包含所有1美元和美元之间的整数n ^ 2美元,因此是一个神奇的广场。
17 24 M = 1 8 15 23 5 7 14 16 4 6 13 20 22 10 12 19 21 3 11 18 25 2 9

双重甚至秩序

doubly-even算法也简单明了,很棘手。
M =重塑(1:n ^ 2, n, n) ';(I, J) = ndgrid (1: n);K =修复(mod(我,4)/ 2)= =修复(mod (J, 4) / 2);M (K) = n ^ 2 + 1 - M (K);
让我们看看我们的朋友魔法(4)。矩阵最初只是顺序从1到16的整数存储4行。
M = 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
逻辑阵列K适用于指数和虚假的一半另一半在这样一个模式。
K = 1 0 0 1 0 1 1 0 0 1 1 0 1 0 0 1
的元素,K是假的,是0,独自离开。
。2 3。5。。8 9。。12。14日15。
的元素,K是真的,这是1,是相反的。
16岁。。13。11 10。。7 6。4。。1
最终结果合并这两个矩阵产生幻方。

甚至单独订单

单独的算法甚至秩序是最复杂的,所以我们将看到它是如何工作的。如果n甚至是单独,然后n / 2美元是奇数魔法(n)可以由四份吗魔法(n / 2)。例如,魔法(10)是获得=魔法(5)通过形成一块矩阵。
(+ 50 + 75 + 25)
列的金额,因为都是平等的sum() +(+ 75)和=和(+ 50)+和(A + 25)。但行资金并不完全正确。算法必须完成通过几互换件行清理行金额。的细节,发出该命令。
类型魔法

进一步的阅读

这篇文章的修改部分魔术方块章的与MATLAB实验

发表与MATLAB®R2012b

|
  • 打印
  • 发送电子邮件

评论

留下你的评论,请点击在这里MathWorks账户登录或创建一个新的。