我正在寻找一个公式或规则,允许我将 n 字符分发到 n * n 网格中,尽可能完美地分发。假设我们有一个包含5个字符的数组,A到E.这里有一个例子,说明它绝对不应该结果:
A B C D E
B C D E A
C D E A B
D E A B C
E A B C D
使用此图案时,字母会聚在一起并且间距不均匀。例如,参见具有重复E和A的对角线等。如果我们尝试另一种模式,那么:
A B C D E
D E A B C
B C D E A
E A B C D
C D E A B
现在使用此模式,所有字符沿网格均匀分布。例如,您不可能在任一轴上找到与另一个B接近的字母B.
我希望这里有一个规则,关于你应该如何为每一行移动ABCDE配置以产生展开模式,所以我可以用它来计算不仅像这样的小数组,而且数组任何尺寸。关于如何实现这一点的任何想法?我试图这样做的语言是Objective-c,如果有帮助的话。
更新 Moron的建议似乎已经完成了这个伎俩(请注意他添加了一个互质使用 n 接近sqrt( n ))。由于他的回答,这是一个网格。
B C D E F G H I J K L M N O P Q R S
P Q R S B C D E F G H I J K L M N O
L M N O P Q R S B C D E F G H I J K
H I J K L M N O P Q R S B C D E F G
D E F G H I J K L M N O P Q R S B C
S B C D E F G H I J K L M N O P Q R
O P Q R S B C D E F G H I J K L M N
K L M N O P Q R S B C D E F G H I J
G H I J K L M N O P Q R S B C D E F
C D E F G H I J K L M N O P Q R S B
R S B C D E F G H I J K L M N O P Q
N O P Q R S B C D E F G H I J K L M
J K L M N O P Q R S B C D E F G H I
F G H I J K L M N O P Q R S B C D E
B C D E F G H I J K L M N O P Q R S
Q R S B C D E F G H I J K L M N O P
M N O P Q R S B C D E F G H I J K L
I J K L M N O P Q R S B C D E F G H
E F G H I J K L M N O P Q R S B C D
答案 0 :(得分:1)
你可以选择一个数字(比如k)相对素数到n(也许接近n / 2或sqrt(n)或者你喜欢的任何数字),然后继续用k移动。
例如n = 8.选择k = 3.你得到
A B C D E F G H
F G H A B C D E
C D E F G H A B
H A B C D E F G
E F G H A B C D
B C D E F G H A
G H A B C D E F
D E F G H A B C
我原以为你不想再看到相同的行了。
这对你有用吗?
这些也可能有所帮助:Latin Squares。
答案 1 :(得分:0)
只要您的数组包含4个以上的字母,将它们向右移动(就像您所做的那样),将始终产生不相互接触的结果。如果您需要其他金额,请使用以下指南。
班次金额的范围应在:
之内2 <= shift_amount <= (array.length - 2)
这是因为不要“触摸”上面一行,一个字符必须在下一行距离它至少2个位置:
X X X X X
X X O X X
A X X X A
在此示例中,假设O已经放置在该行上。现在我们需要生成下一行。 A代表O可以在下一行的最近点,距离是2个空格。
如果您想要分布最多(即数字间隔最大),您应该选择此范围中间的数字(例如,3表示6,3或4表示7等)。
以下是一些更多关于均匀分布的例子,但更多关于数字是否接触的例子:
4x4移动2(成功):2 <= 2 <= 2
A B C D
C D A B
A B C D
...
5x5移动3(成功):2 <= 3 <= 3
A B C D E
D E A B C
B C D E A
E A B C D
C D E A B
5x5偏移4(失败):2 <= 4 <!= 3
A B C D E
E A B C D
D E A B C
C D E A B
B C D E A
6x6移位2(成功):2 <= 2 <= 4
A B C D E F
C D E F A B
E F A B C D
...
26x26移位2(成功):2 <= 2 <= 24
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
Y Z A B C D E F G H I J K L M N O P Q R S T U V W X
W X Y Z A B C D E F G H I J K L M N O P Q R S T U V
...