Hagen von Eitzen la respuesta de los informes del estado de la técnica. Ya que en el enlace no hay ningún ejemplo de los ocho distintos
$\ell_5$-carácter de largo soluciones, aquí va uno. He calculado que con un simple programa en python. También se encuentra en el papel de Agosto. 22, 2014 [arXiv] donde Robin Houston, expone su candidato para un mínimo de superpermutation de 6 símbolos.
1234512341 5234125341 2354123145 2314253142 3514231542
3124531243 5124315243 1254312134 5213425134 2153421354
2132451324 1532413524 1325413214 5321435214 3251432154
321
Editado: le Pregunte por el OP, me decidí a publicar mi python 2 código. Es una rápida y sucia de secuencia de comandos y no hay ningún ejemplo de código escrito. Puede ser mejorado y optimizado en un sin número de maneras, pero funciona. Yo no lo publiques en una programación de sitio, pero aquí andamos de un matemático del sombrero...
La idea básica es hacer crecer nuestro superpermutation paso por paso. Partimos de 12345
y en cada paso que identificar la cola más larga que podría proporcionar una permutación aún sin explotar. Por ejemplo, en el segundo paso se identifican 2345
, en la que nos encontramos 23451
como la siguiente permutación, y añadimos 1
de nuestro resultado, así que ahora tenemos 123451
. Continuar de esta manera nos encontramos con un primer conjunto de la órbita de permutaciones cíclicas en 123451234
. Después de eso, tenemos que añadir dos personajes, ya que la siguiente permutación sólo puede ser 23415
, y al crecimiento de nuestro resultado se convierte en 12345123415
. Vamos a tener momentos donde tenemos tan pocos posible la superposición de personajes que podemos elegir entre diferentes permutaciones (por eso hay ocho distintas soluciones óptimas). En este caso, el fin de los posibles candidatos lexicográficamente y elegir el primero. Cuando no hay más disponibles permutaciones, se sale del programa. Este rendimientos óptimos resultados si el alfabeto es de hasta cinco caracteres. Con seis personajes, mi programa se obtiene un superpermutation de 873 personajes, que conjeturó óptimo antes de Houston papel. Mi programa funciona con alfabetos de longitud arbitraria (si se les da suficiente tiempo para ejecutar ; -) ), pero, como Houston demostró, su resultado no será óptimo. Houston llegó a su menor superpermutation el uso de una heurística solucionador de problemas de investigación de operaciones.
#!/usr/bin/python
# -*- coding: utf-8 -*-
## Change this if you want a step-by-step output
verbose = False
## The alphabet. Also, the first permutation dealt with,
## which defines lexicographic ordering for subsequent choices.
A = '12345'
N = len(A)
## The result string is initialized with the alphabet itself.
R = A
## A dictionary to keep track of the found permutations.
Done = { A: True }
# The basic iteration step.
def process():
global R, Done
# t represents how many characters we need to add.
# First we try with one, then we increase...
for t in range(1,N):
# h is the initial stub (the "head") of our new permutation.
h=R[t-N:]
while len(h) < N:
# A crude way to find the characters still missing from
# the new permutation we are building.
for c in [ x for x in A if x not in h ]:
h += c
break
if h not in Done:
# Found new permutation, update globals and return it.
Done[h] = True
R += h[-t:]
return h
# All possible permutations found!
return ''
p = A
while p != '':
if verbose:
print 'found', p
p = process()
print R
print len(R), 'bytes for', len(Done.keys()), 'permutations of', N, 'objects'