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.