Si no está familiarizado con Braid-Theory, le recomiendo que lea esto primero. Esta pregunta supone que al menos está familiarizado con los conceptos en cuestión y supone que está bien familiarizado con la teoría de grupos.
Definamos σ n ser la trenza en la que el n º hebra (Una indexado) a partir de los mejores cruza sobre el n + 1 º hebra, y σ n - ser la inversa de σ n (que es el n + 1 º cadena cruza el n º hebra).
El grupo trenza B n es entonces generada por <σ 1 , σ 2 , σ 3 ,. . . , σ n-1 > . Por lo tanto, cada trenza en B n se puede escribir como el producto de las trenzas σ. 1
Determinar si dos trenzas en un grupo son iguales no es una tarea simple. Puede ser bastante obvio que σ 1 σ 3 = σ 3 σ 1 , pero es un poco menos obvio que, por ejemplo, σ 2 σ 1 σ 2 = σ 1 σ 2 σ 1 . 2
Entonces la pregunta es "¿Cómo podemos determinar si dos trenzas son iguales?". Bueno, los dos ejemplos anteriores representan un poco de esto. En general, las siguientes relaciones, llamadas relaciones de Artin, son ciertas:
σ i σ j = σ j σ i ; i - j> 1
σ i σ i + 1 σ i = σ i + 1 σ i σ i + 1
Podemos usar estas dos relaciones junto con los axiomas de grupo para demostrar que cualquier trenza igual es igual. Por lo tanto, dos trenzas son iguales si la aplicación repetida de estas relaciones y los axiomas grupales pueden demostrarlo.
Tarea
Escribirás un programa o función para tomar dos trenzas y determinar si son iguales o no. Opcionalmente, también puede tomar un número entero positivo que represente el orden del grupo.
Esta es una pregunta de código de golf , por lo que las respuestas se puntuarán en bytes, con menos bytes mejor.
Entrada y salida
Debe representar una trenza como una lista ordenada de generadores (o cualquier estructura equivalente, por ejemplo, vector). Puede representar los generadores en cualquier forma razonable (por ejemplo, un número entero, dos tuplas de un número entero positivo y un booleano).
A la par con las reglas estándar de problemas de decisión, debe generar uno de dos valores distintos, aceptar y rechazar.
Casos de prueba
[], [] -> True
[1,-1], [] -> True
[1,2,1], [2,1,2] -> True
[1,3], [3,1] -> True
[1,3,2,1],[3,2,1,2] -> True
[1,4,-4,3,2,1], [3,2,1,2] -> True
[2,2,1], [2,1,2] -> False
[1,2,-1], [-1,2,1] -> False
[1,1,1,2],[1,1,2] -> False
1: Tenga en cuenta que mientras B n satisface todas las propiedades de un grupo, la operación en nuestro grupo de trenzas no es conmutativa y, por lo tanto, nuestro grupo no es abeliano.
2: Si desea verificar esto por sí mismo Sugiero aplicar σ 1 - a ambos lados, si dibuja los dos fuera en el papel, o ellos modelar con cadenas reales que debería ser evidente por qué este es el caso.
fuente
[],[]
[1, 4, -4, 3, 2, 1], [3, 2, 1, 2] => TRUE
Respuestas:
Haskell , 190 bytes
Pruébalo en línea!
Cómo funciona
Sea F n el grupo libre en n generadores x 1 , ..., x n . Uno de los primeros resultados en la teoría de la trenza (Emil Artin, Theorie der Zöpfe , 1925) es que tenemos un homomorfismo inyectivo f : B n → Aut ( F n ) donde la acción f σ i de σ i está definida por
f σ i ( x i ) = x i x i + 1 x i −1 ,
f σ i ( x i + 1 ) = x i ,
f σ i ( x j ) = x j para j ∉ { i , i + 1}.
El inverso f σ i −1 viene dado por
f σ i −1 ( x i ) = x i + 1 ,
f σ i −1 ( x i + 1 ) = x i + 1 −1 x i x i + 1 ,
f σ i −1 ( x j ) = x j para j ∉ { i , i + 1}
y, por supuesto, la composición viene dada por f ab = f a ∘ f b .
Para probar si a = b ∈ B n , es suficiente probar que f a ( x i ) = f b ( x i ) para todo i = 1, ..., n . Este es un problema mucho más simple en F n , donde solo necesitamos saber cómo cancelar x i con x i −1 .
En el codigo:
i!j
calcula f σ i ( x j ) (donde cualquierai
oj
puede ser negativo, representando un inverso),foldr(%)[]
realiza reducción en el grupo libre,i&a
calcula f a ( x i ),a?n
calcula [ f a ( x 1 ),…, f a ( x n )],(a#b)n
es la prueba de igualdad para a = b en B n .fuente
Python 2 ,
270263260250249241 bytesPruébalo en línea!
Implementación del método de 'inversión de subpalabras' para resolver el problema de isotopía de trenza: a = b iff ab ^ -1 = la identidad.
Algoritmo tomado de: Soluciones eficientes para el problema de la isotopía de la trenza, Patrick Dehornoy ; describe varios otros algoritmos que pueden ser de interés ...
Este algoritmo funciona marchando de izquierda a derecha en la lista, buscando un número negativo seguido de un número positivo; es decir, una sub-palabra de la forma x i -1 x j con i, j> 0.
Utiliza las siguientes equivalencias:
x i -1 x j = x j x i x j -1 x i -1 si i = j + 1 o j = i + 1
x i -1 x j = identidad (lista vacía) si i == j
x i -1 x j = x j x i -1 contrario.
Mediante la aplicación repetida, terminamos con una lista de la forma
w1 + w2
, donde cada elemento dew1
es positivo y cada elemento dew2
es negativo. (Esta es la acción de la funcióng
).Luego aplicamos
g
una segunda vez a la listaw2 + w1
; la lista resultante debería estar vacía si la lista original fuera equivalente a la identidad.fuente