Introducción
Puede omitir esta parte si ya sabe qué es un grupo cíclico.
Un grupo se define por un conjunto y una operación binaria asociativa $
(es decir, (a $ b) $ c = a $ (b $ c)
existe exactamente un elemento en el grupo e
donde a $ e = a = e $ a
para todos a
en el grupo ( identidad ). Para cada elemento a
en el grupo existe exactamente uno b
tal que a $ b = e = b $ a
( inverso ) Por cada dos elementos a, b
en el grupo, a $ b
está en el grupo ( cierre ).
Podemos escribir a^n
en lugar de a$a$a$...$a
.
El subgrupo cíclico generado por cualquier elemento a
en el grupo es <a> = {e, a, a^2, a^3, a^4, ..., a^(n-1)}
donde n
está el orden (tamaño) del subgrupo (a menos que el subgrupo sea infinito).
Un grupo es cíclico si puede ser generado por uno de sus elementos.
Reto
Dada la tabla de Cayley (tabla de productos) para un grupo finito, determine si es o no cíclico.
Ejemplo
Echemos un vistazo a la siguiente tabla de Cayley:
1 2 3 4 5 6
2 3 1 6 4 5
3 1 2 5 6 4
4 5 6 1 2 3
5 6 4 3 1 2
6 4 5 2 3 1
(Esta es la tabla de Cayley para el Grupo Diédrico 3, D_3).
Esto está indexado en 1, así que si queremos encontrar el valor de 5 $ 3
, miramos en la quinta columna en la tercera fila (tenga en cuenta que el operador no es necesariamente conmutativo, por 5 $ 3
lo que no es necesariamente igual a 3 $ 5
. Vemos aquí eso 5 $ 3 = 6
(también que 3 $ 5 = 4
)
Podemos encontrar <3>
comenzando con [3]
, y luego, mientras la lista es única, agregue el producto del último elemento y el generador (3). Nosotros conseguimos [3, 3 $ 3 = 2, 2 $ 3 = 1, 1 $ 3 = 3]
. Nos detenemos aquí con el subgrupo {3, 2, 1}
.
Si calcula <1>
a través <6>
verá que ninguno de los elementos del grupo de generar todo el grupo. Por lo tanto, este grupo no es cíclico.
Casos de prueba
La entrada se dará como una matriz, la salida como un valor de decisión verdadero / falso.
[[1,2,3,4,5,6],[2,3,1,6,4,5],[3,1,2,5,6,4],[4,5,6,1,2,3],[5,6,4,3,1,2],[6,4,5,2,3,1]] -> False (D_3)
[[1]] -> True ({e})
[[1,2,3,4],[2,3,4,1],[3,4,1,2],[4,1,2,3]] -> True ({1, i, -1, -i})
[[3,2,4,1],[2,4,1,3],[4,1,3,2],[1,3,2,4]] -> True ({-1, i, -i, 1})
[[1,2],[2,1]] -> True ({e, a} with a^-1=a)
[[1,2,3,4,5,6,7,8],[2,3,4,1,6,7,8,5],[3,4,1,2,7,8,5,6],[4,1,2,3,8,5,6,7],[5,8,7,6,1,4,3,2],[6,5,8,7,2,1,4,3],[7,6,5,8,3,2,1,4],[8,7,6,5,4,3,2,1]] -> False (D_4)
[[1,2,3,4,5,6],[2,1,4,3,6,5],[3,4,5,6,1,2],[4,3,6,5,2,1],[5,6,1,2,3,4],[6,5,2,1,4,3]] -> True (product of cyclic subgroups of order 2 and 3, thanks to Zgarb)
[[1,2,3,4],[2,1,4,3],[3,4,1,2],[4,3,1,2]] -> False (Abelian but not cyclic; thanks to xnor)
Se le garantizará que la entrada sea siempre un grupo.
Puede tomar la entrada como valores indexados a 0.
fuente
[[0,1,2,3],[1,2,3,0],[2,3,0,1],[3,0,1,2]]
)?[1..n]
que puede estar ocultando fallas en algunas respuestas.Respuestas:
J , 8 bytes
Pruébalo en línea!
Explicación
fuente
1 e.#@C.
, fwiwŒCL€1e
6 bytes en Jelly.Casco ,
11 109 bytesBasado en 1. Devuelve el índice de un generador si existe uno, 0 de lo contrario. Pruébalo en línea!
Explicación
fuente
Jalea ,
1311 bytesPruébalo en línea!
fuente
JavaScript (ES6), 52 bytes
fuente
Python 2 ,
969197 bytesPruébalo en línea!
fuente
or 1+g
->or-~g
.Jalea , 15 bytes
Pruébalo en línea!
Primera idea tonta que se me ocurrió: verificar si hay isomorfismo en Z n . (Este código es O (n!) ...)
fuente
R ,
10197 bytesVerificar todos los casos de prueba
Esto simplemente calcula
<g>
para cada unog \in G
y luego prueba siG \subseteq <g>
, luego verifica si alguno de ellos es verdadero. Sin embargo, dado que siempre estamos aplicando$g
a la derecha, replicamosm[g,]
(lag
fila th) y luego indexamos en esa fila con el resultado de la aplicación$g
, acumulando los resultados en lugar de usarm[g,g$g]
cada vez, lo que ahorró alrededor de 4 bytes.fuente
Clojure, 68 bytes
fuente
Python 2 , 82 bytes
Pruébalo en línea!
Se ingresa la tabla Cayley indexada en 0; Salida verdadero / falso para el grupo cíclico / no cíclico.
fuente