La respuesta de Hagen von Eitzen informa sobre el estado del arte. Dado que en el enlace proporcionado no hay un ejemplo de las ocho soluciones distintas de longitud de caracteres $\ell_5$, aquí tienes una. Lo calculé con un programa simple en python. También se encuentra en el artículo del 22 de agosto de 2014 [arXiv] donde Robin Houston presenta su candidato para una superpermutación mínima de 6 símbolos.
1234512341 5234125341 2354123145 2314253142 3514231542
3124531243 5124315243 1254312134 5213425134 2153421354
2132451324 1532413524 1325413214 5321435214 3251432154
321
Editado: A instancias del OP, decidí publicar mi código en python 2. Es un script rápido y sucio y no es un ejemplo de código bien escrito. Se puede mejorar y optimizar de mil maneras, pero funciona. No lo publicaría en un sitio de programación, pero aquí estamos usando el sombrero de un matemático...
La idea básica es hacer crecer nuestra superpermutación paso a paso. Comenzamos desde 12345
y en cada paso identificamos la cola más larga que podría proporcionar una permutación aún no usada. Por ejemplo, en el segundo paso identificamos 2345
, sobre el cual encontramos 23451
como la siguiente permutación, y agregamos 1
a nuestro resultado, por lo que ahora tenemos 123451
. Continuando de esta manera encontramos una primera órbita completa de permutaciones cíclicas en 123451234
. Después de eso, debemos agregar dos caracteres, ya que la siguiente permutación solo puede ser 23415
, y nuestro resultado en crecimiento se convierte en 12345123415
. Habrá puntos en los que tengamos tan pocos caracteres superpuestos posibles que podemos elegir entre diferentes nuevas permutaciones (por eso hay ocho soluciones óptimas distintas). En este caso, ordeno los posibles candidatos lexicográficamente y elijo el primero. Cuando no haya más permutaciones disponibles, el programa termina. Esto produce resultados óptimos si el alfabeto tiene hasta cinco caracteres. Con seis caracteres, mi programa produce una superpermutación de 873 caracteres, que se conjeturó óptima antes del artículo de Houston. Mi programa funciona con alfabetos de longitud arbitraria (si se le da suficiente tiempo para ejecutarse ;-) ) pero, como Houston demostró, su resultado no será óptimo. Houston llegó a su superpermutación más corta utilizando un solucionador heurístico de problemas de investigación de operaciones.
#!/usr/bin/python
# -*- coding: utf-8 -*-
## Cambia esto si quieres una salida paso a paso
verbose = False
## El alfabeto. También, la primera permutación con la que se trata,
## que define el orden lexicográfico para las elecciones posteriores.
A = '12345'
N = len(A)
## La cadena de resultado se inicializa con el propio alfabeto.
R = A
## Un diccionario para hacer un seguimiento de las permutaciones encontradas.
Done = { A: True }
# El paso básico de iteración.
def process():
global R, Done
# t representa cuántos caracteres necesitamos agregar.
# Primero probamos con uno, luego aumentamos...
for t in range(1,N):
# h es el muñón inicial (la "cabeza") de nuestra nueva permutación.
h=R[t-N:]
while len(h) < N:
# Una forma grosera de encontrar los caracteres que aún faltan
# en la nueva permutación que estamos construyendo.
for c in [ x for x in A if x not in h ]:
h += c
break
if h not in Done:
# Se encontró una nueva permutación, actualiza las globales y devuélvela.
Done[h] = True
R += h[-t:]
return h
# ¡Todas las permutaciones posibles encontradas!
return ''
p = A
while p != '':
if verbose:
print 'encontrado', p
p = process()
print R
print len(R), 'bytes para', len(Done.keys()), 'permutaciones de', N, 'objetos'
1 votos
¿Estás asumiendo que la combinación no tiene dígitos repetidos?
2 votos
La combinación correcta no tiene dígitos repetidos, sí. Si introduces una combinación con dígitos repetidos, simplemente no se abrirá.
0 votos
Lo que quieres se llama "secuencia de De Bruijn". Consulta es.wikipedia.org/wiki/Secuencia_de_De_Bruijn
2 votos
No, las secuencias de De Bruijn permiten repeticiones de caracteres en subcadenas. Aquí estamos tratando con los problemas más difíciles de encontrar subcadenas sin caracteres repetidos.
0 votos
Claramente recuerdo una o dos preguntas similares que han sido hechas antes (quizás con un número diferente de dígitos).
2 votos
Por supuesto, estás ignorando una serie de hechos incómodos sobre las cerraduras del mundo real, como el hecho de que obligan a realizar reinicios entre intentos en lugar de comportarse como describes, y las versiones electrónicas detectarán manipulaciones y limitarán cuántos intentos se pueden hacer en cierta cantidad de tiempo. Pero para fines de un problema matemático...
0 votos
Este en realidad es puramente mecánico; no puede forzar reinicios entre secuencias de 5 ya que si solo lo presiono una vez, se desincroniza. Si se construye correctamente, puede forzar un reinicio cuando agito la perilla para intentar, aunque no lo he intentado.
1 votos
Donde solía trabajar, las cerraduras cifradas en un área de trabajo SAR súper secreta requieren una secuencia de COMBINACIONES de hasta 3 botones. por lo que el número de posibilidades para cada pulsación es C(5,1)+C(5,2)+C(5,3) = 5+10+10 =25 ¡Eso amplía considerablemente las cosas! No se requirieron más de tres botones simultáneos porque los extraterrestres ET no tenían suficientes dedos.