主题
Search

数组


数组是“列表的列表”,其中每个列表级别的长度相同。一个 d 维数组的大小(有时称为“形状”)表示为 m×n×...×p_()_(d)。最常见的数组类型是二维 m×n 矩形数组,具有 m 列和 n 行。如果 m=n,则结果为方阵。有时,数组中元素的顺序很重要(如在矩阵中),而在其他时候,模反射(以及对于方阵的旋转)等价的数组被认为是相同的(如在幻方素数数组中)。

Wolfram 语言中,深度为 n 的数组使用嵌套列表表示,可以使用以下命令生成数组[a, {i, j, ...}]。类似地,可以使用以下命令找到数组的维度Dimensions[t],以及命令ArrayQ[expr] 测试表达式是否为完整数组。例如,取

  t=Array[a,{2,2,2,3}]

给出深度为 4 的列表

  {{{{a[1,1,1,1],a[1,1,1,2],a[1,1,1,3]},
     {a[1,1,2,1],a[1,1,2,2],a[1,1,2,3]}},
    {{a[1,2,1,1],a[1,2,1,2],a[1,2,1,3]},
     {a[1,2,2,1],a[1,2,2,2],a[1,2,2,3]}}},
   {{{a[2,1,1,1],a[2,1,1,2],a[2,1,1,3]},
     {a[2,1,2,1],a[2,1,2,2],a[2,1,2,3]}},
    {{a[2,2,1,1],a[2,2,1,2],a[2,2,1,3]},
     {a[2,2,2,1],a[2,2,2,2],a[2,2,2,3]}}}}

维度为 {2, 2, 2, 3}

为了穷举列出给定形状的不同数组的数量,其中每个元素都是 k 种可能选择之一,通过遍历每种情况并检查它是否等价于较早的情况的朴素算法几乎已经是最高效的了。运行时间必须至少是答案的数量,这非常接近 k^(mn...p),以至于差异并不显著。

然而,找到给定形状的可能数组的数量要容易得多,并且可以使用 波利亚枚举定理获得精确公式。对于 m×n 数组的简单情况,即使这样也证明是不必要的,因为只有几种可能的对称类型,允许显式计数可能性。例如,考虑 mn 偶数且不同的情况,因此只需要包括反射。以一个具体案例为例,设 m=6n=4,因此数组看起来像

 a b c | d e f; g h i | j k l; - - - + - - -; m n o | p q r; s t u | v w x,
(1)

其中每个 ab、...、x 可以取值从 1 到 k。可能的排列总数为 k^(24) (一般情况下为 k^(mn))。与其左右镜像图像等价的排列数为 k^(12) (一般情况下为 k^(mn/2)),与其上下镜像图像或旋转 180 degrees 度也相同。还有 k^6 种排列(一般情况下为 k^(mn/4))具有完全对称性。

一般来说,因此以下公式成立

 {k^(mn/4)   with full symmetry; k^(mn/2)-k^(mn/4)   with only left-right reflection; k^(mn/2)-k^(mn/4)   with only up-down reflection; k^(mn/2)-k^(mn/4)   with only 180 degrees rotation,
(2)

所以有

 k^(mn)-3k^(mn/2)+2k^(mn/4)
(3)

种排列没有对称性。现在除以每种类型图像的数量,对于 m!=nm,n偶数 的情况,结果为

N(m,n,k)=1/4k^(mn)+(1/2)(3)(k^(mn/2)-k^(mn/4))+1/4(k^(mn)-3k^(mn/2)+2k^(mn/4))
(4)
=1/4k^(mn)+3/4k^(mn/2)+1/2k^(mn/4).
(5)

因此,数字的数量级为 O(k^(mn)/4),其中“校正”项的阶数要小得多。


另请参阅

反幻方, 欧拉方阵, 柯克曼女学生问题, 拉丁矩形, 拉丁方阵, 幻方, 矩阵, 珀金斯夫人的被子, 乘法表, 正交数组, 完全平方数, 素数数组, 商差表, 房间方阵, 方阵, 斯托拉尔斯基数组, 张量, 真值表, 向量, 威佐夫数组

使用 探索

请引用本文为

Weisstein, Eric W. "数组。" 来自 Web 资源。 https://mathworld.net.cn/Array.html

主题分类