On the Construction of
Orthogonal Arrays and Covering Arrays
Using Permutation Groups

George Sherwood

Abstract

An alternate formulation is given for index one orthogonal arrays based on computer searches. Orthogonal arrays in diagonal form, and their elements' products, powers, and orders, are derived from first column vectors which result from the searches. Mapping operators relating the first column vectors for each number of levels (m) are described. A scheme for factoring the mapping operators is suggested also. Results are given for values of m which are primes, prime powers, and prime power products. An association between first column vectors and irreducible monic polynomials is made for selected prime power values of m.

Permutation vectors which extend the formulation to groups with orders of powers of m are defined for values of m which are primes and prime powers. Properties of the permutation vectors are described. A formulation is given for strength two covering arrays based on the permutation vectors. These arrays have wm2-(w-1)m rows and (mw+1-1)/(m-1) columns for values of w which are positive integers. A sliding levels technique is suggested to include values of m which are prime power products.

Zero sum arrays are constructed using the permutation vectors. A recursive construction for strength three covering arrays is given for m equal to two. Alternatively, the cats program is used to find strength three and four covering arrays by removing redundant rows from covering arrays of permutation vectors.

For values of m which are primes and prime powers, another formulation describes sets of permutation vectors which do not cover. The formulation is used to find covering arrays of strength greater than two, by forming arrays of permutation vectors in which each combination of columns contains a combination of permutation vectors which is not noncovering. Resulting covering arrays of strengths l=3 and l=4 have zml-(z-1)m rows for values of z which are positive integers. The numbers of columns found are consistent with the conjecture that arrays of this form can have m+1 columns for z=1 and mz columns for z>1.

For values of m which are primes and prime powers, and for strengths greater than two, a narrower, recursive search is described for index one orthogonal arrays of permutation vectors. The search results suggest a formula for orthogonal arrays with m+1 columns, and strengths up to m+1. Selected results are given for strengths up to four.

Preface

Four years ago I started a mathematical journey. These are my travel notes. They document my search for ways to construct covering arrays using various computer search techniques. The computer search has been a heuristic tool for me, with results leading to improved searches, as well as to the mathematical patterns described here.

I suppose the reader who is interested in orthogonal arrays and covering arrays may desire a rigorous mathematical deduction of results. That is not the purpose of these notes. I have included some informal logical illustrations, but the emphasis here is on pattern recognition and description, rather than formal proof. The reader will not find a clear boundary drawn between derivation and conjecture. Instead, I invite the reader who travels these paths to join in the logical development of the ideas, to add the rigor where it fits.

AT&T Labs provided computer facilities supporting this work. (A Sun Microsystems Ultra 5 workstation executed the searches described here.) Also, I would like to acknowledge the interest and support of several people in my earlier work on the Constrained Array Test System (which was one of the motivators of the present work). These colleagues include:

Otto SgroDavid Gelperin
Jim ProwseBob Stahl
Alex GillonWilla Ehrlich
Merle PollerColin Mallows
Bob BrownlieNeil Sloane
Madhav Phadke

In particular, Colin and Neil showed me there was new ground to explore here. Finally I want to thank my family – Ann, Jeffrey, Andrew, and Daniel – for their patience and understanding during my travels.

Have a good trip!
George Sherwood
March 2002

List of Updates
-Current browser versions, Netscape 6 or IE 5.50, or later are recommended. Earlier versions (Netscape 4.7, IE 5.00) don't always get the formatting just right.
May 17, 2002-The total number of noncovering sets wel,m is expressed as a product of a power of m and a Gaussian binomial coefficient.
November 10, 2002- The covering array search algorithm for strength l>2 and rows of vectors z>1 is improved for better efficiency. A new section describes the search algorithm.
November 10, 2002- The improved search algorithm yields the following results for strength l=3. The covering arrays have zm3-(z-1)m rows for positive integers z. For z=2 rows of vectors, n=9 columns are found for number of levels m=3; 16 columns are found for m=4; 24 columns for m=5; 31 columns for m=7; 40 columns for m=8. For z=3 rows of vectors, n=20 columns are found for number of levels m=3; 28 columns are found for m=4. The numbers of columns found are consistent with the conjecture that arrays of this form can have mz columns.
November 10, 2002-Additional arrays of permutation vectors, for m=7, m=8, and m=9, are included in an appendix.
November 10, 2002-The pound sign # in a section heading indicates the material is not required to understand later sections, and may be skipped on a first reading. The pound sign provides a link to the next section not so marked.
January 4, 2003- Additional strength l=3 results are included. For z=2 rows of vectors, n=39 columns are found for number of levels m=9.
March 22, 2003- Additional strength l=3 results are included. For z=1 row of vectors, n=10 columns are found for number of levels m=8; 10 columns are found for m=9; 12 columns are found for m=11; 14 columns are found for m=13. For z=2 rows of vectors, n=44 columns are found for number of levels m=11; 39 columns are found for m=13.
March 22, 2003- Numbers of covering arrays found for l=3 and for selected values of m and z are tabulated and described in a revised section. (For z=1 these results are for orthogonal arrays of index one.)
June 8, 2003- The improved search algorithm described earlier is used to find strength l=4 arrays with w=3. For z=2 rows of vectors, n=8 columns are found for number of levels m=2; 9 columns are found for m=3.
August 15, 2003- Additional strength l=4 results are included. For z=1 row of vectors, n=6 columns are found for number of levels m=5. For z=2 rows of vectors, n=10 columns are found for number of levels m=3; 9 columns are found for m=4; 11 columns are found for m=5. For z=3 rows of vectors, n=8 columns are found for number of levels m=2; 16 columns are found for m=3. For z=4 rows of vectors, n=11 columns are found for number of levels m=2. A new section gives numbers of wFwP arrays found for l=4.
August 15, 2003- Two new sections summarize results for m=2 levels with strengths l=3 and l=4. Another new section gives numbers of w,zFwP(') arrays found for m=2.
August 15, 2003- The section mark notation § is introduced to represent the operation of removing redundant rows via the cats program. This use (typically for m=2) is to distinguish clearly from the removal of the (z-1)m duplicate rows indicated by the apostrophe in w,zFwP'. For example, for m=2 and l=4, the operation of the cats program on the lowest covering array 3,3F3P§ yields the same array as the lowest 3,2F3P' array (which illustrates the high redundancy in the 3,3F3P' array).
June 8, 2004-Highlights of this site have been collected in a paper submitted to the Journal of Combinatorial Designs.
June 8, 2004-Some of the construction methods described here are used in a covering test case generator service available from Testcover.com.
June 8, 2004-Question for Site Visitors: The coveringarray.org domain has been reserved as a possible site for a public domain covering array database. The idea is to collect "interesting" arrays, e.g. which represent various construction methods, or which may be of particularly small size, etc. To gauge whether there is sufficient interest to justify the project, would you please respond by email as to whether and how such a data base would be of use to you? And if you are a researcher, would you be willing to contribute arrays to the database?

Table of Contents

Table of Symbols

SymbolMeaning
A, B, Cvector or array
A * Bcomposite vector operation or vector product of A and B
Dv, ^Dvfirst column vector mapping operators for different multiplication table
wEzero sum array
wFan array of one row of levels for which wFwP is a covering array
w,zFan array of z rows of levels for which w,zFwP is a covering array
w,zFwP'a covering array w,zFwP for z>1 from which (z-1)m redundant rows have been removed
w,zFwP§a covering array w,zFwP processed by the cats program to remove redundant rows, typically for m=2 levels
wGcovering array for n=mw
wHcovering array for n=(mw+1-1)/(m-1)
wHm/m'covering array using sliding levels technique
wIcovering array using recursive construction for l=3 and m=2
J, Krow vector of level representation array R
wLindex one orthogonal array of permutation vectors given by formula for n=m+1
Muvfirst column vector level mapping operator Su * Dv
^Muvfirst column vector position mapping operator ^Su * ^Dv
wNindex one orthogonal array of permutation vectors using recursive search for n=m+1
wPhorder mw+1 permutation vector of h
wPh–order mw reduced permutation vector of h
wPmw+1-by-mw array whose columns are the permutation vectors,
permutation vector operator
w,lQarray of noncovering permutation vector levels in base m notation
w,lQ~noncovering permutation vector formula array
Rlevel representation array or function
Su, ^Sufirst column vector mapping operators for same multiplication table
Ttemplate array for diagonal form construction
apower or exponent
bnumber of primaries in a prime power product
cmaximum number of plus vector columns in an index one orthogonal array for l=2 and r=m2
dqdifference vector
wel,mnumber of noncovering sets of permutation vectors
f(x)irreducible monic polynomial
fuvfirst column vector of an index one orthogonal array in diagonal form
guvfirst row vector of an index one orthogonal array in standard form
hlevel or value of an array element from 0 to m-1,
level to label a permutation vector from 0 to mw-1
hw order vector whose components give the level h in base m notation, from 0 to mw-1
h., dot vectors of h, dot operators acting on h
h[w]zero sum vector of h, zero sum operator acting on h
hwPpermutation vector operator acting on h
irow position or subscript for array of vectors
jrow position or subscript for vector, table or array
kcolumn position or subscript for vector, table, or array
k+, k+plus vectors of k, plus operators acting on k
k+{m}plus vector of k, plus operator acting on k for m values, from 0 to m-1
kx, kxcross vectors of k, cross operators acting on k
kx{c/}cross vector of k, cross operator acting on k truncated to c of m values, from 0 to c-1
lstrength of an array
mnumber of levels taken by the factors in an array
nnumber of columns or factors in an array
pprime number
qtotitive of m-1
rnumber of rows or runs in an array
srow position of a subarray in a covering array
tvector component or position for h, a place in base m notation,
column position of a subarray in a covering array
u, vvectors to label first column vectors in terms of their mapping operators
wbase m logarithm of the order of the group of permutation vectors wPh with the composite vector operation *
order of vector of subarrays wG
iteration label for recursive construction of wI
..., :ellipses
=/=not equal to

Table of Covering Arrays

StrengthNumber
of Levels
Number
of Rows
Number
of Columns
ArrayReference Tables
lmrn

any
up to n
11any{n}
1anymany0+·{n}
22431E formulavectorslevels
22431H formulavectorslevels
22672H formulavectorslevels
228153H formulavectorslevels
2210314H formulavectorslevels
2212635H formulavectors
23931E formulavectorslevels
23941H formulavectorslevels
2315132H formulavectorslevels
2321403H formulavectorslevels
241631E formulavectorslevels
241651H formulavectorslevels
242461H4/5 formulavectorslevels
2428212H formulavectorslevels
2440853H formulavectors
252561H formulavectorslevels
2545312H formulavectorslevels
25651563H formula
263631H formulavectorslevels
264881H6/7 formulavectorslevels
266291H6/8 formulavectorslevels
2678101H6/9 formulavectorslevels
2690572H6/7 formulavectors
26118732H6/8 formula
274981H formulavectorslevels
276391H7/8 formulavectorslevels
2779101H7/9 formulavectorslevels
2791572H formulavectors
286491H formulavectorslevels
2880101H8/9 formulavectorslevels
28118121H8/11 formulavectorslevels
28120732H formula
2981101H formulavectorslevels
29119121H9/11 formulavectorslevels
29153912H formula
21010031H formulavectorslevels
210120121H10/11 formulavectorslevels
210166141H10/13 formulavectorslevels
2102301332H10/11 formula
211121121H formulavectorslevels
211167141H11/13 formulavectorslevels
2112311332H formula
21214451H formulavectorslevels
212168141H12/13 formulavectorslevels
212252171H12/16 formulavectorslevels
212284181H12/17 formulavectorslevels
2123241832H12/13 formula
213169141H formulavectorslevels
213253171H13/16 formulavectorslevels
213285181H13/17 formulavectorslevels
2133251832H formula
21419631H formulavectorslevels
21422451H14/15 formulavectorslevels
214254171H14/16 formulavectorslevels
214286181H14/17 formulavectorslevels
214356201H14/19 formulavectorslevels
2144942732H14/16 formula
21522551H formulavectorslevels
215255171H15/16 formulavectorslevels
215287181H15/17 formulavectorslevels
215357201H15/19 formulavectorslevels
2154952732H15/16 formula
216256171H formulavectorslevels
216288181H16/17 formulavectorslevels
216358201H16/19 formulavectorslevels
2164962732H formula
217289181H formulavectorslevels
217359201H17/19 formulavectorslevels
217523241H17/23 formulavectorslevels
2175613072H formula
21832431H formulavectorslevels
218360201H18/19 formulavectorslevels
218524241H18/23 formulavectorslevels
219361201H formulavectorslevels
219525241H19/23 formulavectorslevels
22040051H formulavectorslevels
220526241H20/23 formulavectorslevels
22144151H formulavectorslevels
221527241H21/23 formulavectorslevels
22248431H formulavectorslevels
222528241H22/23 formulavectorslevels
223529241H formulavectorslevels
32832L formulavectorslevels
32842E formulavectorslevels
32840I or 2P or 2,1F2P or 2,2F2P§ formulavectorslevels
321442,2F2P' formulavectorslevels
321481I or 3P§ formulavectorslevels
321482,3F2P§ formulavectorslevels
322082,3F2P' formulavectorslevels
3220164P§ formulavectorslevels
3222162I formulavectorslevels
3226162,4F2P' formulavectorslevels
3228325P§ formulavectorslevels
3232323I formulavectorslevels
3234646P§ formulavectors
3244644I formulavectors
332742E formulavectorslevels
332742,1F2P formulavectorslevels
332742L or 2N formulavectorslevels
335192,2F2P' formulavectorslevels
3375192,3F2P' formulavectorslevels
3375202,3F2P' formulavectors
346442E formulavectorslevels
346452L or 2N formulavectorslevels
346462,1F2P formulavectorslevels
34124162,2F2P' formulavectorslevels
34184282,3F2P' formulavectors
3512562,1F2P formulavectorslevels
3512562L or 2N formulavectorslevels
35245232,2F2P' formulavectorslevels
35245242,2F2P' formulavectors
3621642E formulavectorslevels
3634282F2P 6/7 formulavectorslevels
36678312,2F2P 6/7' formulavectors
3734382F2P formulavectorslevels
3734382L or 2N formulavectorslevels
37679312,2F2P' formulavectors
3851292F2P formulavectorslevels
3851292L or 2N formulavectors
38512102F2P formulavectors
381016402,2F2P' formulavectors
39729102F2P formulavectors
39729102L or 2N formulavectors
391449392,2F2P' formulavectors
3101330122F2P 10/11 formula
3101330122L10/11 or 2N10/11 formula
3102650442,2F2P 10/11' formula
3111331122F2P formulavectors
3111331122L or 2N formulavectors
3112651442,2F2P' formulavectors
3122196142F2P 12/13 formula
3124380392,2F2P 12/13' formula
3132197142F2P formulavectors
3134381392,2F2P' formulavectors
421643,1F3P formulavectorslevels
421653E formulavectorslevels
423064F4P§ formulavectorslevels
423275F5P§ formulavectorslevels
423083,2F3P' or 3,3F3P§ formulavectorslevels
42408_ formulavectorslevels
424483,3F3P' formulavectorslevels
4258113,4F3P' formulavectorslevels
438143L formulavectorslevels
438153E formulavectorslevels
438153F3P formulavectorslevels
4315993,2F3P' formulavectorslevels
43159103,2F3P' formulavectorslevels
43237163,3F3P' formulavectors
4425653E formulavectorslevels
4425653F3P formulavectorslevels
4425653L formulavectorslevels
4450893,2F3P' formulavectors
4562563F3P formulavectors
4562563L formulavectors
451245113,2F3P' formula
46129653E formula
46240083L6/7 formula
47240183L formula

Definitions

Dot Vectors

This section defines Dot Vectors and Dot Operators.

For each of the m levels h=0, 1, ..., m-1, define the vector h. given by repeating the value of h m times. For example, for m=3, the dot vectors are:

h. : 0.1.2.
0
0
0
1
1
1
2
2
2

The unary dot operator acts on an array to replace each element with its corresponding dot vector. The result is an array with m times the number of rows compared to the original array. Thus,

(0 1 2).= 0
0
0
1
1
1
2
2
2

Similarly, the raised dot operator replaces each element of an array with its corresponding dot vector transposed. The result is an array with m times the number of columns compared to the original array:

(0 1 2)· = 0 0 0 1 1 1 2 2 2

The number of levels m for a dot vector or operator usually is taken from its context. If the number of levels is not clear, the value is indicated in braces after the dot (e.g. h.{3}). When the number of columns c<m, the dot vectors may be truncated to c elements. This case is indicated by {c/m} or just {c/} after the dot (e.g. {2/6} when m=6).

Plus Vectors

This section defines Plus Vectors and Plus Operators for three cases:

In all cases the zero plus vector 0+{m} is defined to contain all m levels in ascending order:

0
1
:
m-1

Note that the definitions given in this section are not the only choice leading to the formulations given here. Later sections will illustrate two cases in which alternate plus vector definitions can affect results. However, a systematic study of all choices of plus vectors is beyond the current scope.

Plus Vectors for m=prime

Construct the modulo m=p addition table (p=prime) for the m order cyclic group. Each table element in row j=0, 1, ..., m-1 and column k=0, 1, ..., m-1 has the value j+k (mod m).

For example, for m=3, the table is

k:0 12
j: 0
1
2

0
1
2
1
2
0
2
0
1

Now define the m vectors k+ given by the table columns. In this example, they are

k+: 0+1+2+
0
1
2
1
2
0
2
0
1

The unary plus operator acts on an array to replace each element with its corresponding plus vector. The result is an array with m times the number of rows compared to the original array. Thus,

(0 1 2)+= 0
1
2
1
2
0
2
0
1

Similarly, the raised plus operator replaces each element of an array with its corresponding plus vector transposed. The result is an array with m times the number of columns compared to the original array:

(0 1 2)+ = 0 1 2 1 2 0 2 0 1

The number of levels m for a plus vector or operator usually is taken from its context. If the number of levels is not clear, the value is indicated in braces after the plus (e.g. h+{3}). When c<m, the plus vectors may be truncated to c elements. This case is indicated by {c/m} or just {c/} after the plus (e.g. h+{2/6} when m=6).

Plus Vectors for m=prime power

For m=pa, in which p=prime and a>1, the plus vectors are defined in terms of the pa-1 plus vectors. Thus, plus vectors for m=pa can be found recursively from those of p. An R function associates each of the m levels with a row in an m-by-a level representation array. The R function is given by

R(0+{m})=(0.{mp-1} R(0+{mp-1}))+{p}

Here R(0+{p}) is defined to be 0+{p}. So for m=9, p=3, and a=2,

R(0+{9})=(0.{3} R(0+{3}))+{3}

and

R( 0
1
2
3
4
5
6
7
8
) = 0
1
2
0
1
2
0
1
2
0
1
2
1
2
0
2
0
1

The addition table for m=pa is constructed by modulo p addition of elements from the level representation array. For each table element in the jth row, there is a corresponding row J in the level representation array, with values J0, ..., Ja-1. For each table element in the kth column, there is a corresponding row K in the level representation array, with values K0, ..., Ka-1. The j,k table element is found by vector addition of the two level representation rows (mod p), and then finding the position of the row with the resulting sum J0+K0, ... , Ja-1+Ka-1. The j,k table element is

R-1(R(j)+R(k)mod p) = R-1(J+Kmod p)

Here R(j) gives the jth row of the level representation array, and R-1 is defined as the function which gives the position of each row of the level representation array.

For example, for m=9, j=4, and k=5, the rows to add are 1 2 and 2 0. The resulting row is 0 2 which is represented by the level 6. So the 4+5 element in the addition table is 6. The complete addition table for this example is

k:0 12 345 678
j: 0
1
2
3
4
5
6
7
8

0
1
2
3
4
5
6
7
8
1
2
0
4
5
3
7
8
6
2
0
1
5
3
4
8
6
7
3
4
5
6
7
8
0
1
2
4
5
3
7
8
6
1
2
0
5
3
4
8
6
7
2
0
1
6
7
8
0
1
2
3
4
5
7
8
6
1
2
0
4
5
3
8
6
7
2
0
1
5
3
4

Now define the m vectors k+ given by the table columns.

k+ = R-1(R(0+)+R(k.)mod p) = R-1(R(0+)+K.mod p)

In this example, they are

k+: 0+1+2+ 3+4+5+ 6+7+8+
0
1
2
3
4
5
6
7
8
1
2
0
4
5
3
7
8
6
2
0
1
5
3
4
8
6
7
3
4
5
6
7
8
0
1
2
4
5
3
7
8
6
1
2
0
5
3
4
8
6
7
2
0
1
6
7
8
0
1
2
3
4
5
7
8
6
1
2
0
4
5
3
8
6
7
2
0
1
5
3
4

Similarly, for m=27, p=3, and a=3, R(0+{27})=(0.{9} R(0+{9}))+{3} and

R( 0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
) = 0
1
2
0
1
2
0
1
2
0
1
2
0
1
2
0
1
2
0
1
2
0
1
2
0
1
2
0
1
2
1
2
0
2
0
1
0
1
2
1
2
0
2
0
1
0
1
2
1
2
0
2
0
1
0
1
2
1
2
0
2
0
1
1
2
0
2
0
1
0
1
2
2
0
1
0
1
2
1
2
0

The k+ vectors for m=27 are

k+: 0+1+2+ 3+4+5+ 6+7+8+ 9+10+11+ 12+13+14+ 15+16+17+ 18+19+20+ 21+22+23+ 24+25+26+
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
1
2
0
4
5
3
7
8
6
10
11
9
13
14
12
16
17
15
19
20
18
22
23
21
25
26
24
2
0
1
5
3
4
8
6
7
11
9
10
14
12
13
17
15
16
20
18
19
23
21
22
26
24
25
3
4
5
6
7
8
0
1
2
12
13
14
15
16
17
9
10
11
21
22
23
24
25
26
18
19
20
4
5
3
7
8
6
1
2
0
13
14
12
16
17
15
10
11
9
22
23
21
25
26
24
19
20
18
5
3
4
8
6
7
2
0
1
14
12
13
17
15
16
11
9
10
23
21
22
26
24
25
20
18
19
6
7
8
0
1
2
3
4
5
15
16
17
9
10
11
12
13
14
24
25
26
18
19
20
21
22
23
7
8
6
1
2
0
4
5
3
16
17
15
10
11
9
13
14
12
25
26
24
19
20
18
22
23
21
8
6
7
2
0
1
5
3
4
17
15
16
11
9
10
14
12
13
26
24
25
20
18
19
23
21
22
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
0
1
2
3
4
5
6
7
8
10
11
9
13
14
12
16
17
15
19
20
18
22
23
21
25
26
24
1
2
0
4
5
3
7
8
6
11
9
10
14
12
13
17
15
16
20
18
19
23
21
22
26
24
25
2
0
1
5
3
4
8
6
7
12
13
14
15
16
17
9
10
11
21
22
23
24
25
26
18
19
20
3
4
5
6
7
8
0
1
2
13
14
12
16
17
15
10
11
9
22
23
21
25
26
24
19
20
18
4
5
3
7
8
6
1
2
0
14
12
13
17
15
16
11
9
10
23
21
22
26
24
25
20
18
19
5
3
4
8
6
7
2
0
1
15
16
17
9
10
11
12
13
14
24
25
26
18
19
20
21
22
23
6
7
8
0
1
2
3
4
5
16
17
15
10
11
9
13
14
12
25
26
24
19
20
18
22
23
21
7
8
6
1
2
0
4
5
3
17
15
16
11
9
10
14
12
13
26
24
25
20
18
19
23
21
22
8
6
7
2
0
1
5
3
4
18
19
20
21
22
23
24
25
26
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
19
20
18
22
23
21
25
26
24
1
2
0
4
5
3
7
8
6
10
11
9
13
14
12
16
17
15
20
18
19
23
21
22
26
24
25
2
0
1
5
3
4
8
6
7
11
9
10
14
12
13
17
15
16
21
22
23
24
25
26
18
19
20
3
4
5
6
7
8
0
1
2
12
13
14
15
16
17
9
10
11
22
23
21
25
26
24
19
20
18
4
5
3
7
8
6
1
2
0
13
14
12
16
17
15
10
11
9
23
21
22
26
24
25
20
18
19
5
3
4
8
6
7
2
0
1
14
12
13
17
15
16
11
9
10
24
25
26
18
19
20
21
22
23
6
7
8
0
1
2
3
4
5
15
16
17
9
10
11
12
13
14
25
26
24
19
20
18
22
23
21
7
8
6
1
2
0
4
5
3
16
17
15
10
11
9
13
14
12
26
24
25
20
18
19
23
21
22
8
6
7
2
0
1
5
3
4
17
15
16
11
9
10
14
12
13

As before the unary plus operator acts on an array to replace each element with its corresponding plus vector.

Plus Vectors for m=prime power product

When m>1, and is divisible by b>1 distinct primes, m can be expressed as a product of b primaries, which contain the prime factors of m raised to the appropriate powers: m=p0a0 p1a1 ... pb-1ab-1. In this case, the plus vectors are defined in terms of the plus vectors of the b primaries. An R function associates each of the m levels with a row in an m-by-b level representation array. The R function is given by

R(0+{m})=0.{mp0-a0}+{p0a0} 0.{mp1-a1}+{p1a1} ... 0.{mpb-1-ab-1}+{pb-1ab-1}

Each column of the level representation array consists of repetitions of the zero plus vectors of one of the primaries. The number of repetitions is chosen to form a total of m rows. So for m=12, b=2, p0=2, a0=2, p1=3, and a1=1.

R( 0
1
2
3
4
5
6
7
8
9
10
11
) = R(0+{12}) = 0.{3}+{4} 0.{4}+{3} = 0+{4}
0+{4}
0+{4}
0+{3}
0+{3}
0+{3}
0+{3}
= 0
1
2
3
0
1
2
3
0
1
2
3
0
1
2
0
1
2
0
1
2
0
1
2

The addition table for m is constructed by addition of elements from the level representation array using the addition tables as defined above for the corresponding primaries. For each table element in the jth row, there is a corresponding row J in the level representation array, with values J0, ..., Jb-1. For each table element in the kth column, there is a corresponding row K in the level representation array, with values K0, ..., Kb-1. The j,k table element is found by addition of the corresponding level representation row elements, using the addition table for the primary of each column, and then finding the position of the row with the resulting sum J0+K0, ... , Jb-1+Kb-1. The j,k table element is R-1(J+Kaddition tables).

For example, for m=12, j=4, and k=5, the rows to add are 0 1 and 1 2, using the addition tables for p0a0 = 22 = 4

k0:0 12 3
j0: 0
1
2
3

0
1
2
3
1
0
3
2
2
3
0
1
3
2
1
0

and p1a1 = 31 = 3

k1:0 12
j1: 0
1
2

0
1
2
1
2
0
2
0
1

respectively. The resulting row is 1 0 which is represented by the level 9. So the 4+5 element in the addition table is 9. The complete addition table for this example is

k:0 12 345 678 91011
j: 0
1
2
3
4
5
6
7
8
9
10
11

0
1
2
3
4
5
6
7
8
9
10
11
1
8
3
10
5
0
7
2
9
4
11
6
2
3
4
5
6
7
8
9
10
11
0
1
3
10
5
0
7
2
9
4
11
6
1
8
4
5
6
7
8
9
10
11
0
1
2
3
5
0
7
2
9
4
11
6
1
8
3
10
6
7
8
9
10
11
0
1
2
3
4
5
7
2
9
4
11
6
1
8
3
10
5
0
8
9
10
11
0
1
2
3
4
5
6
7
9
4
11
6
1
8
3
10
5
0
7
2
10
11
0
1
2
3
4
5
6
7
8
9
11
6
1
8
3
10
5
0
7
2
9
4

Now define the m vectors k+ given by the table columns.

k+ = R-1(R(0+)+R(k.)addition tables) = R-1(R(0+)+K.addition tables)

In this example, they are

k+: 0+1+2+ 3+4+5+ 6+7+8+ 9+10+11+
0
1
2
3
4
5
6
7
8
9
10
11
1
8
3
10
5
0
7
2
9
4
11
6
2
3
4
5
6
7
8
9
10
11
0
1
3
10
5
0
7
2
9
4
11
6
1
8
4
5
6
7
8
9
10
11
0
1
2
3
5
0
7
2
9
4
11
6
1
8
3
10
6
7
8
9
10
11
0
1
2
3
4
5
7
2
9
4
11
6
1
8
3
10
5
0
8
9
10
11
0
1
2
3
4
5
6
7
9
4
11
6
1
8
3
10
5
0
7
2
10
11
0
1
2
3
4
5
6
7
8
9
11
6
1
8
3
10
5
0
7
2
9
4

As before the unary plus operator acts on an array to replace each element with its corresponding plus vector.

Composite Vector Operators

Each of the addition tables of the previous section defines the addition operation for a group of order m. The sum of j+k is given by the table element in the jth row and the kth column. 0 is the identity element, and inverses are identified by row-column pairs whose sum is 0.

The plus vectors associated with each table, and their composite vector operation, also form a group of order m. Each of these vector groups is isomorphic to the corresponding integer addition group of order m.

In the following definition vectors are described as functions of their positions or subscripts. That is, for a vector A of order m, the element in the jth row is given by

A(j) = Aj

Similarly, all the elements of A can be expressed as

A = A(0+) = A( 0
1
:
m-1
) = A(0)
A(1)
:
A(m-1)
= A0
A1
:
Am-1

The composite vector operation is the binary operation of one vector on another. It is defined1 by

(A * B)(0+) = B(A(0+))

The elements of the A * B vector are those of the B vector arranged according to the values of the A vector elements. The jth element of A * B is found by using the jth element of A as the position of B. The resulting value is the jth element of A * B. For example, if A = 4+{12} and B = 5+{12}, then A * B = 9+{12}, as follows.

A * B = (4+ * 5+)(0+) = 5+(4+( 0
1
2
3
4
5
6
7
8
9
10
11
)) = 5+( 4
5
6
7
8
9
10
11
0
1
2
3
) = 9
4
11
6
1
8
3
10
5
0
7
2
= 9+

The plus vectors form abelian groups in that

j+ * k+ = k+ * j+

However generally vectors will not commute in the composite vector operation:

A * B =/= B * A

A more general definition of the composite vector operation will be needed below. Consider two arrays of vectors A and B with r rows and c columns. That is, the element of A in the ith row and the kth column Aik is a vector. Similarly the element of B in the ith row and the kth column Bik is a vector. For such arrays the composite vector operation A * B is defined to be the r-by-c array of vectors C whose elements are given by

Cik = Aik * Bik

for all rows i and columns k. The composite vector operation is also called the vector product here.


  1. This definition differs from the usual composite function definition because the order of the functions A and B is reversed. The order of functions in this definition is chosen to be consistent with the left-to-right order of operations implied by the dot, plus and cross operations.

Preparation

Orthogonal Array Search Criterion

Consider an m-by-c array of vectors A which forms an orthogonal array of strength1 l=2 and index one2. That is, each pair of distinct columns k and k' contains each pair of levels h and h' once. (Here, h and h' may be equal; k and k' cannot be.) Suppose each vector Aik is of order m and contains each of the m levels once. Thus, each vector can be expressed as a bijective function of its position

Aijk = Aik(j)

and there is an inverse function which gives the position for each of the levels

j = Aik-1(h)

Consider a pair of distinct columns k and k'. Each is composed of m vectors of order m. The vector elements with position j in the ith row of vectors are Aik(j) = h and Aik'(j) = h'. The pair of levels h and h' can appear only once, in this ith row of vectors. Consider also a pair of vectors in the same columns k and k', but in a different row of vectors i'. The vectors are Ai'k and Ai'k' as illustrated below.


:
:
...Aik(j)...Aik'(j)...

:
:
...Ai'k(j')...Ai'k'(j')...

:
:

Select the position j' such that

Ai'k'(j') = h' = Aik'(j)

Since the pair of levels h and h' occur in k and k' in the ith row of vectors and that pair of levels cannot occur more than once, the corresponding elements in column k must be different:

Aik(j) = h =/= Ai'k(j')

And since

j' = Ai'k'-1(h') = Ai'k'-1(Aik'(j))

substitution yields

Aik(j) =/= Ai'k(Ai'k'-1(Aik'(j)))

Application of Ai'k-1 gives

Ai'k-1(Aik(j)) =/= Ai'k'-1(Aik'(j))

and the definition of the composite vector operation yields

Aik * Ai'k-1 =/= Aik' * Ai'k'-1

This is the criterion to be used to find orthogonal arrays of vectors, for all distinct i and i', and all distinct k and k'.

For a given set of vectors, say h+, h=0, ... , m-1, a table of m2 products h+ * h'+-1 can be computed for reference. Then the search can be done over an m-by-c array of vectors, which is faster than a more general search over an m2-by-c array of levels.


  1. An orthogonal array with index one has strength l (greater than or equal to 0, and less than or equal to c) if every r-by-l subarray contains each l-tuple of levels exactly once as a row.
  2. Generally the term position (rather than index) is used here to mean the subscript of a vector or array, or its independent variable when considered as a function. The index of an orthogonal array refers to the number of times each l-tuple occurs.

Standard Form

To narrow its scope and thus improve its speed, the orthogonal array search will require found arrays to be in standard form. A strength l=2 array of plus vectors is in standard form when

  1. its 0th column consists of m 0+ vectors;
  2. its 1st column consists of the m i+ vectors in ascending order, i=0, 1, ... , m-1;
  3. its 0th row consists of c 0+ vectors; and
  4. its 1st row consists of c plus vectors in ascending order.

Requiring these conditions poses no loss of generality due to well known properties of orthogonal arrays1. To illustrate this point consider an orthogonal array of plus vectors Aik in some other, arbitrary form. The following four transformations can be applied to the array to produce an orthogonal array in standard form. Conversely, an orthogonal array in standard form can lead to many other forms by similar transformations in reverse.

  1. To make the 0th column consist of 0+ vectors, apply to each row of vectors, the inverse of the vector in the 0th column. Each row i of vectors is transformed as follows.
    Ai0-1 ·{c/m} * (Ai0Ai1...Ai c-1) = Ai0-1*Ai0Ai0-1*Ai1...Ai0-1*Ai c-1

    (Here the ·{c/m} notation means the Ai0-1 vector is to be repeated over c columns, because c may be less than m.) By definition, the effect of applying Ai0-1 to form the vector product is the rearrangement of the rows of levels within the ith row of vectors. This transformation is a permutation of rows, which results in an orthogonal array with the same parameters -- l, m, c, and r.

  2. Consider the orthogonal array search criterion with k=0 and k'=1. For all distinct i and i',
    Ai0 * Ai'0-1 =/= Ai1 * Ai'1-1

    For an array with 0.+ as its 0th column,

    0+ = 0+ * 0+-1 =/= Ai1 * Ai'1-1

    so

    Ai'1 =/= Ai1

    Thus the m vectors in the 1st column are all different and must include all plus vectors from the set under consideration. Now it is possible to rearrange of the rows of vectors so that the 1st column contains the i+ vectors in ascending order. This transformation is a permutation of rows, which results in an orthogonal array with the same parameters.

  3. To make the 0th row of vectors consist of 0+ vectors, apply to each column of vectors the inverse of the vector in the 0th row of vectors repeated m times. Each column k of vectors is transformed as follows.
    A0k * A0k-1
    A1k * A0k-1
    :
    Am-1 k * A0k-1

    By definition, the effect of taking the vector product of each plus vector in the column with A0k-1 is a remapping of levels within the kth column. Specifically, the level h of each column vector element is mapped to the level of the element of A0k-1 with position h. Consequently, this transformation is a permutation of levels of a column, which results in an orthogonal array with the same parameters.

  4. Consider the orthogonal array search criterion with i'=0 and i=1. For all distinct k and k',
    A1k * A0k-1 =/= A1k' * A0k'-1

    For an array with + as its 0th row of vectors,

    A1k * 0+-1 =/= A1k' * 0+-1

    so

    A1k =/= A1k'

    Thus the c vectors in the 1st row are all different. Now it is possible to rearrange the columns so that the 1st row of vectors contains the plus vectors in ascending order. This transformation is a permutation of columns, which results in an orthogonal array with the same parameters.

    When c=m, the orthogonal array of plus vectors can be expressed as an m-by-m array to which the plus operator is applied. If the orthogonal array is in standard form, the m-by-m array can be interpreted as a multiplication table. Its 0th row and 0th column consist of the element 0, indicating all multiplication products of 0 equal 0. Its 1st row and 1st column consist of the m elements in ascending order, indicating 1 is the multiplicative identity element. For example, when l=2 and c=m=5, the orthogonal array of plus vectors is

    A = ( 0
    0
    0
    0
    0
    0
    1
    2
    3
    4
    0
    2
    4
    1
    3
    0
    3
    1
    4
    2
    0
    4
    3
    2
    1
    )+

    The corresponding multiplication table is contained in the parentheses. In this example, the table represents multiplication modulo 5.

    When m=p is a prime, or m=pa is a prime power, then c=m. In these cases corresponding addition and multiplication tables may define rings or fields for the elements h=0, 1, ..., m-1. Similarly the tables may define isomorphic rings or fields for the plus vectors h+=0+, 1+, ..., (m-1)+ . Here the addition operation is the composite vector operation, and the multiplication operation is given by the multiplication table.


  1. For example, see Chapter 1 of Orthogonal Arrays Theory and Applications by A. S. Hedayat, N. J. A. Sloane, and John Stufken, 1999 Springer-Verlag.

Diagonal Form

To narrow its scope and improve its speed further, the orthogonal array search will look for arrays in diagonal form. A strength l=2 orthogonal array of plus vectors B is in diagonal form when it can be written as a vector product of a template array T and a first column vector fuv as follows.

B = (T * fuv·{c/m})+

in which T is an m-by-c array, and fuv is a vector with m rows. (The u and v vectors are used to label the first column vectors as described in a later section.) For m>1, the template array elements are defined as follows.

Tik = 0if i=0 or k=0, and
if m>1.
T11 = 1if i=1 and k=1, and
if m=2.
(Tik-1)mod m = (i-1 + k-1)mod m-1if i>0 and k>0, and
if m>2.

The fuv vector contains a permutation of the m levels with 0 and 1 in the 0th and 1st positions respectively. For example, for m=5 and c=5, the template array is

T = 0
0
0
0
0
0
1
2
3
4
0
2
3
4
1
0
3
4
1
2
0
4
1
2
3

and a first column vector is

f00 = 0
1
2
4
3

Their product is

T * f00· = 0
0
0
0
0
0
1
2
4
3
0
2
4
3
1
0
4
3
1
2
0
3
1
2
4

(Note the first column of this array is f00, which leads to the name first column vector for an orthogonal array in diagonal form.) Finally, the application of the plus operator gives the full array:

B = 0
1
2
3
4
0
1
2
3
4
0
1
2
3
4
0
1
2
3
4
0
1
2
3
4
0
1
2
3
4
1
2
3
4
0
2
3
4
0
1
4
0
1
2
3
3
4
0
1
2
0
1
2
3
4
2
3
4
0
1
4
0
1
2
3
3
4
0
1
2
1
2
3
4
0
0
1
2
3
4
4
0
1
2
3
3
4
0
1
2
1
2
3
4
0
2
3
4
0
1
0
1
2
3
4
3
4
0
1
2
1
2
3
4
0
2
3
4
0
1
4
0
1
2
3

Because an orthogonal array in diagonal form has 0+ vectors in its 0th row of vectors and in its 0th column, it already satisfies conditions 1 and 3 for standard form (above). Thus, only transformations of type 2 and 4 are needed to change the orthogonal array from diagonal form to standard form. It is convenient to express the array in standard form in terms of the first column vector, as follows.

Aik = 0+if i=0 or k=0, and
if m>1.
A11 = 1+if i=1 and k=1, and
if m=2.
Aik = fuv({fuv-1(i) - 1 + fuv-1(k) - 1}mod m-1 + 1mod m)+ if i>0 and k>0, and
if m>2.

In this example

A24 = f00({f00-1(2) - 1 + f00-1(4) - 1}mod 4 + 1mod 5)+
= f00({2-1 + 3-1}mod 4 + 1mod 5)+
= f00(3+1mod 5)+
= f00(4)+
= 3+

The entire orthogonal array in standard form is

A = ( 0
0
0
0
0
0
1
2
3
4
0
2
4
1
3
0
3
1
4
2
0
4
3
2
1
)+ = 0
1
2
3
4
0
1
2
3
4
0
1
2
3
4
0
1
2
3
4
0
1
2
3
4
0
1
2
3
4
1
2
3
4
0
2
3
4
0
1
3
4
0
1
2
4
0
1
2
3
0
1
2
3
4
2
3
4
0
1
4
0
1
2
3
1
2
3
4
0
3
4
0
1
2
0
1
2
3
4
3
4
0
1
2
1
2
3
4
0
4
0
1
2
3
2
3
4
0
1
0
1
2
3
4
4
0
1
2
3
3
4
0
1
2
2
3
4
0
1
1
2
3
4
0

In general the mapping from orthogonal arrays of plus vectors in diagonal form to those in standard form is not injective. This is because there can be multiple diagonal form arrays mapped to the same standard form array. In particular, for m=5 and c=5, the first column vector

f10 = 0
1
3
4
2

maps to the same standard form array as f00 does.

Generally the mapping from an orthogonal array of plus vectors in diagonal form to one in standard form is not surjective either, because there are orthogonal arrays of vectors in standard form1 which do not have corresponding diagonal forms. (They are not found in a search for arrays in diagonal form.)

Requiring the orthogonal array search to find arrays of plus vectors in diagonal form is neither necessary nor sufficient. It is not a necessary condition because there are other orthogonal arrays which are not found by the search for arrays in diagonal form. Search results include orthogonal arrays based on Galois fields however. Finding an array in diagonal form is not sufficient because there are diagonal arrays of plus vectors which do not satisfy the orthogonal array search criterion. For example, for m=5 and c=5, the identity vector

0+ = 0
1
2
3
4

yields a nonorthogonal array, though its product with the template array is diagonal. Thus 0+ is not a first column vector in this example.

The advantage of searching for orthogonal arrays in diagonal form is the reduction in the scope of the search, leading to shorter execution times for large m. The search is reduced to finding first column vectors, for which there may be (m-2)! permutations of levels. In practice, the number of cases to test is less than (m-2)! because the first column vector can be built incrementally. After level 0 is assigned to the 0th row and column, and after 1 is assigned to the first diagonal position, each candidate level can be checked in a partial array to see if it meets the orthogonal array search criterion. If it does, a candidate level is chosen for the next diagonal. If it does not, the search considers the next candidate level for the current diagonal, without consideration of additional diagonals containing this nonorthogonal, partial permutation.


  1. For m=9 and c=9, a search for orthogonal arrays of plus vectors in standard form yields 17 arrays. Three of these are obtained from a corresponding search for orthogonal arrays of plus vectors in diagonal form, followed by the mapping to standard form (as described below). Two of the 17 are based on noncommutative rings with identity, because the multiplication tables are not symmetric. However each can be described in terms of the following template array (with four diagonal subarrays) and one of two first column vectors.
    00 0 0 00 0 0 000
    T = 0
    0
    0
    0
    1 2 3 4
    2 3 4 1
    3 4 1 2
    4 1 2 3
    5 8 7 6
    6 5 8 7
    7 6 5 8
    8 7 6 5
    with f = 1
    3
    2
    6
    or 1
    3
    2
    6
    0
    0
    0
    0
    5 8 7 6
    6 5 8 7
    7 6 5 8
    8 7 6 5
    3 4 1 2
    4 1 2 3
    1 2 3 4
    2 3 4 1
    4
    7
    8
    5
    8
    7
    4
    5

    The remaining 12 orthogonal arrays from the search yield multiplication tables which are not associative.

Products, Powers, and Primitive Elements

Products of Elements

The interpretation of the standard form orthogonal array of plus vectors as a multiplication table, and its expression in terms of the first column vector, lead to formulas for products of the levels. The multiplication products expressed in terms of the first column vectors are as follows:

h x h' = 0if h=0 or h'=0, and
if m>1.
h x h' = 1if h=1 and h'=1, and
if m=2.
h x h' = fuv({fuv-1(h) - 1 + fuv-1(h') - 1}mod m-1 + 1mod m) if h>0 and h'>0, and
if m>2.

Powers of Elements

In particular, for m>1 the powers of h are given by

ha = 0if h=0.
ha = 1if h=1.
ha = fuv(a{fuv-1(h) - 1}mod m-1 + 1mod m)if h>1.

In the m=5 example,

43 = f00(3{f00-1(4) - 1}mod 4 + 1mod 5) = f00(3{3 - 1}mod 4 + 1mod 5) = f00(2 + 1mod 5) = f00(3) = 4

# Primitive Elements

The powers of h formula for h>1 implies which positions in a first column vector can contain primitive elements. (The powers of a primitive element generate all m-1 nonzero levels.) If q is a totitive of m-1, then fuv(q+1) is a primitive element. (q is a totitive of m-1 if it is a relative prime of m-1 and less than m-1.)

When h=fuv(q+1),

ha = fuv(aqmod m-1 + 1mod m)

If q equals a totitive of m-1,

aqmod m-1 takes on all values = 0, 1, ..., m-2, for a=1, 2, ..., m-1

To see this, divide aq by m-1 as follows,

aq = (m-1)y + z

in which y and z are integers. aqmod m-1 = z, the remainder. A similar expression for a different power is:

a'q = (m-1)y' + z'

Now consider when z'=z.

a'q - (m-1)y' = z' = z = aq - (m-1)y

so

(a'-a)q = (m-1)(y'-y)

Since the right side of the equation is a multiple of m-1, and since q and m-1 are relative primes, a'-a must be a multiple of m-1. Since the values of a=1, 2, ..., m-1 differ by less than m-1, aqmod m-1 = z takes on all m-1 values 0, 1, ..., m-2 without repeating. Now in

ha = fuv(aqmod m-1 + 1mod m)

the argument of fuv must take on all values 1, 2, ..., m-1, so ha generates all nonzero levels.

In the m=5 example, q=1 or 3 (relative primes of 4), so the first column vectors can have primitive elements only with positions 2 or 4. The primitive elements are 2 and 3.

Note that for any m>2, q may be 1 or m-2. Therefore the first column vector positions 2 and m-1 must contain primitive elements.

# Orders of Elements

Generally the powers of h formula implies which positions in a first column vector contain elements of a particular order. For an element h>1 with order a,

1 = ha = fuv(a{fuv-1(h) - 1}mod m-1 + 1mod m)

Application of fuv-1 and subtraction yield

0 = fuv-1(1) - 1mod m = a{fuv-1(h) - 1}mod m-1

so

y(m-1)=a{fuv-1(h) - 1}

for some integer y. Solving for h yields

h = fuv(y(m-1)/a + 1)

in which 0<y<a, so the position of fuv is greater than 1 and less than m. Also, a must divide y(m-1) so that the position of fuv is an integer. Now y must be a totitive of a (i.e. y/a must be irreducible). To see this, suppose there is a reduced fraction

y'/a' = y/a

in which y'<y and a'<a. Replacement of y/a with y'/a' gives

h = fuv(y'(m-1)/a' + 1)

Then the powers of h formula indicates a' is the order of h:

ha' = fuv(a'{y'(m-1)/a'}mod m-1 + 1mod m) = 1

which contradicts the statement that a is the order of h. Thus, since y is a totitive of a, a cannot divide y, and a must divide m-1.

The order of the first column vector element in each position greater than 1 is determined as follows.

  1. Find the allowed orders from the set of integers a>1 which divide m-1.
  2. For each order a, find the totitives, which are the allowed values of y.
  3. Compute the position y(m-1)/a + 1 for each pair of a,y.

For example, for m=16, the orders and corresponding positions are as follows.

ordertotitiveposition
ayy(m-1)/a + 1
31