|
REFERENCES
|
T. Ito, Creation Method of Table, Creation Apparatus, Creation Program and Program Storage Medium, U.S. Patent application 20040243621, Dec. 2, 2004.
D. S. Krotov, V. N. Potapov, On the reconstruction of N-quasigroups of order 4 and the upper bounds on their numbers, Proc. Conference devoted to the 90th anniversary of Alexei A. Lyapunov (Novosibirsk, Russia, October 8-11, 2001), 2001, http://www.ict.nsc.ru/ws/Lyap2001/2363/
B. D. McKay, I. M. Wanless, A census of small latin hypercubes, SIAM J. Discrete Math. 22:2 (2008) 719-736.
|
|
PROG
|
# (Python)
N=12 # the maximum arity to calculate
J, K=[[[[]]]], [[[[]]]]
for n in range(1, N+1):
.J+=[[[]]] # create empty J[n][0]
.K+=[[[]]] # create empty K[n][0]
.for i in range(1, n):
..J[n]+=[[]] # create empty J[n][i]
..K[n]+=[[]] # create empty K[n][i]
..if (i<=n-i):
...J[n][i] += J[n-i][i][:]
...K[n][i] += map(lambda K_: [K_[0]+1]+K_[1:], K[n-i][i])
..for j in range(i+1, n-i+1):
...J[n][i] += map(lambda J_: [i]+J_, J[n-i][j])
...K[n][i] += map(lambda K_: [1]+K_, K[n-i][j])
.J[n]+=[[[n]]] # create J[n][n]
.K[n]+=[[[1]]] # create K[n][n]
J = map(lambda Ji:sum(Ji, []), J); K = map(lambda Ji:sum(Ji, []), K) # merge groups
# now J[n] and K[n] represent a list of partitions of n into positive summands:
# n=J[n][i][0]*K[n][i][0]+J[n][i][1]*K[n][i][1]+J[n][i][2]*K[n][i][2]+...
# 0<J[n][i][0]<J[n][i][1]<J[n][i][2]<... -- summands; K[n][i][j]>0 -- multiplicities
map(lambda Ji:Ji.pop(), J); map(lambda Ki:Ki.pop(), K) # remove the trivial 1-partitions
#
import math
F=map(lambda J1, K1, n:map(lambda J2, K2: reduce(lambda res, JK: res/JK, map(lambda J3, K3:math.factorial(K3)*math.factorial(J3)**K3, J2, K2), math.factorial(n)), J1, K1), J, K, range(N+1))
# F[n][i] is the number of partitions of an n-set that correspond to the partition J[n][i], K[n][i] of n.
La=map(lambda n:2L**(2**n-n-1), range(N+1))
Ras, Ra0, R_0, R_s, P_a, V, T = [0, 0L], [0, 0L], [0, 0L], [0, 0L], [0, 0L], [1, 1L], [4, 24L]
for n in range(2, N+1):
.V+=[0L]; T+=[0L]; P_a+=[0L]; Ras+=[0L]; Ra0+=[0L]; R_0+=[0L]; R_s+=[0L]
.for i in range(len(K[n])):
..R_0[n], Ra0[n], R_s[n], Ras[n] = map(lambda A, B, C :
...A[n] + reduce(lambda r, t:r*(B[J[n][i][t]]-C*A[J[n][i][t]])**K[n][i][t], range(len(K[n][i])), ((1-C)*P_a[sum(K[n][i])]+C)*F[n][i]),
...(R_0, Ra0, R_s, Ras), (V, La, V, La), (0, 0, 1, 1))
.R_0[n] *= 3
.P_a[n] = La[n] - Ra0[n] - 2*Ras[n]
.V[n] = 3*P_a[n] + R_0[n] + 4*R_s[n]
.T[n] = 4*(6**n)*V[n]
|