Estoy estudiando un código para producir secuencias cíclicas binarias de De Bruijn. Si $n$ es la longitud de la subsecuencia que no debe repetirse más de una vez, busca una secuencia de Bruijn no cíclica de longitud $2^n + n - 1$ y devuelve el primer $2^n$ bits como la secuencia cíclica.
Esto parece dar siempre una secuencia cíclica de De Bruijn, pero no entiendo por qué. entiendo por qué. ¿Por qué los últimos $n-1$ bits del no cíclico de longitud $2^n+n-1$ siempre el mismo que el primero $n-1$ ¿Bits?
Aquí está el código en Python.
def debruijn(x):
if x.find(x[-n:]) < len(x)-n: # check if last n chars occur earlier in the string
return
if len(x) == N+n-1:
print(x[:N])
return
debruijn(x+"0")
debruijn(x+"1")
n = 4
x = "0"*n
N = 2**n
debruijn(x)
Este es el resultado de $n=4$ .
0000100110101111
0000100111101011
0000101001101111
0000101001111011
[...]
(Publicado originalmente en https://stackoverflow.com/questions/57731516/why-does-this-de-bruijn-code-always-return-0s-for-the-last-few-bits pero trasladado aquí a petición).