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.
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 Sgro | David Gelperin | |
| Jim Prowse | Bob Stahl | |
| Alex Gillon | Willa Ehrlich | |
| Merle Poller | Colin Mallows | |
| Bob Brownlie | Neil 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
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:
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,
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:
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. h·{2/6} when m=6).
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:
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.
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
Now define the m vectors k+ given by the table columns. In this example, they are
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,
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:
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).
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
Here R(0+{p}) is defined to be 0+{p}.
So for m=9, p=3, and a=2,
and
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
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
Now define the m vectors k+ given by the table columns.
In this example, they are
Similarly, for m=27, p=3, and a=3,
R(0+{27})=(0.{9} R(0+{9}))+{3} and
The k+ vectors for m=27 are
As before the unary plus operator acts on an array to replace each element with its corresponding plus vector.
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
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.
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
and p1a1 = 31 = 3
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
Now define the m vectors k+ given by the table columns.
In this example, they are
As before the unary plus operator acts on an array to replace each element with its corresponding plus vector.
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
Similarly, all the elements of A can be expressed as
The composite vector operation is the binary operation
of one vector on another.
It is defined1 by
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.
The plus vectors form abelian groups in that
However generally vectors will not commute in the composite vector operation:
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
for all rows i and columns k.
The composite vector operation is also called the vector product here.
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
and there is an inverse function which gives the position for each of the levels
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.
Select the position j' such that
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:
And since
substitution yields
Application of Ai'k-1 gives
and the definition of the composite vector operation yields
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.
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
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.
(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.
For an array with 0.+ as its 0th column,
so
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.
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.
For an array with 0·+ as its 0th row of vectors,
so
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
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.
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
Table of Covering Arrays
Definitions
Dot Vectors
h. :
0. 1. 2.
0
0
0
1
1
1
2
2
2
(0 1 2). =
0
0
0
1
1
1
2
2
2
(0 1 2)· = 0 0 0 1 1 1 2 2 2 Plus Vectors
0
1
:
m-1
Plus Vectors for m=prime
k: 0
1 2 j:
0
1
2
0
1
2
1
2
0
2
0
1
k+:
0+ 1+ 2+
0
1
2
1
2
0
2
0
1
(0 1 2)+ =
0
1
2
1
2
0
2
0
1
(0 1 2)+ = 0 1 2 1 2 0 2 0 1 Plus Vectors for m=prime power
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
k: 0
1 2
3 4 5
6 7 8 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
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
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
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
Plus Vectors for m=prime power product
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
k0: 0
1 2
3 j0:
0
1
2
3
0
1
2
3
1
0
3
2
2
3
0
1
3
2
1
0
k1: 0
1 2 j1:
0
1
2
0
1
2
1
2
0
2
0
1
k: 0
1 2
3 4 5
6 7 8
9 10 11 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
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
Composite Vector Operators
A = A(0+) =
A(
0
1
:
m-1
) =
A(0)
A(1)
:
A(m-1)
=
A0
A1
:
Am-1
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+
Preparation
Orthogonal Array Search Criterion
: : ... Aik(j) ... Aik'(j) ... : : ... Ai'k(j') ... Ai'k'(j') ... : :
Standard Form
Ai0-1 ·{c/m} * (Ai0 Ai1 ... Ai c-1) =
Ai0-1*Ai0 Ai0-1*Ai1 ... Ai0-1*Ai c-1
A1k * A0k-1
:
Am-1 k * A0k-1
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
)+
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.
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 = 0 | if i=0 or k=0, and if m>1. |
| T11 = 1 | if i=1 and k=1, and if m=2. |
| (Tik-1)mod m = (i-1 + k-1)mod m-1 | if 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 |
| 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.
| 0 | 0 0 0 0 | 0 0 0 0 | 0 | 0 | ||||
| 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.
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' = 0 | if h=0 or h'=0, and if m>1. |
| h x h' = 1 | if 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. |
In particular, for m>1 the powers of h are given by
| ha = 0 | if h=0. |
| ha = 1 | if 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 |
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),
If q equals a totitive of m-1,
To see this, divide aq by m-1 as follows,
in which y and z are integers. aqmod m-1 = z, the remainder. A similar expression for a different power is:
Now consider when z'=z.
so
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
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.
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,
Application of fuv-1 and subtraction yield
so
for some integer y. Solving for h yields
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
in which y'<y and a'<a. Replacement of y/a with y'/a' gives
Then the powers of h formula indicates a' is the order of h:
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.
For example, for m=16, the orders and corresponding positions are as follows.
| order | totitive | position |
|---|---|---|
| a | y | y(m-1)/a + 1 |
| 3 | 1 |