An array is a "list of lists" with the length of each level of list the same. The size (sometimes called the "shape") of a -dimensional array is then indicated as
. The most common type of array
encountered is the two-dimensional
rectangular array having
columns and
rows. If
,
a square array results. Sometimes, the order of the elements in an array is significant
(as in a matrix), whereas at other times, arrays which
are equivalent modulo reflections (and rotations, in the case of a square array)
are considered identical (as in a magic square or
prime array).
In the Wolfram Language, an array of depth is represented using nested lists, and
can be generated using the command Array[a,
i, j, ...
]. Similarly, the dimensions of an array can be found using
Dimensions[t],
and the command ArrayQ[expr]
tests if an expression is a full array. Taking for example
t=Array[a,{2,2,2,3}]
gives the depth-4 list
{{{{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]}}}}
with dimensions 2,
2, 2, 3
.
In order to exhaustively list the number of distinct arrays of a given shape with each element being one of
possible choices, the naive algorithm of running through each case and checking to
see whether it is equivalent to an earlier one is already just about as efficient
as can be. The running time must be at least the number of answers, and this is so
close to
that the difference isn't significant.
However, finding the number of possible arrays of a given shape is much easier, and an exact formula can be obtained using the Pólya
enumeration theorem. For the simple case of an array, even this proves unnecessary since there are
only a few possible symmetry types, allowing the possibilities to be counted explicitly.
For example, consider the case of
and
even and distinct, so only reflections need be included.
To take a specific case, let
and
so the array looks like
(1)
|
where each ,
, ...,
can take a value from 1 to
. The total number of possible arrangements is
(
in general). The number of arrangements which are equivalent to their left-right
mirror images is
(in general,
),
as is the number equal to their up-down mirror images, or their rotations through
. There are also
arrangements (in general,
) with full symmetry.
In general, it is therefore true that
(2)
|
so there are
(3)
|
arrangements with no symmetry. Now dividing by the number of images of each type, the result, for
with
even,
is
(4)
| |||
(5)
|
The number is therefore of order , with "correction" terms of much smaller
order.