Il gruppo è ciclico?


21

introduzione

Puoi saltare questa parte se sai già cos'è un gruppo ciclico.

Un gruppo è definito da un insieme e da un'operazione binaria associativa $(cioè (a $ b) $ c = a $ (b $ c). Esiste esattamente un elemento nel gruppo in ecui a $ e = a = e $ aper tutti anel gruppo ( identità ). Per ogni elemento anel gruppo esiste esattamente uno btale che a $ b = e = b $ a( inverso ) Per ogni due elementi a, bnel gruppo, a $ bè nel gruppo ( chiusura ).

Possiamo scrivere a^nal posto di a$a$a$...$a.

Il sottogruppo ciclico generato da qualsiasi elemento anel gruppo è <a> = {e, a, a^2, a^3, a^4, ..., a^(n-1)}dove si ntrova l'ordine (dimensione) del sottogruppo (a meno che il sottogruppo sia infinito).

Un gruppo è ciclico se può essere generato da uno dei suoi elementi.

Sfida

Data la tabella Cayley (tabella dei prodotti) per un gruppo finito, determinare se è ciclica o meno.

Esempio

Diamo un'occhiata al seguente tavolo 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

(Questa è la tabella Cayley per Dihedral Group 3, D_3).

Questo è 1-indicizzato, quindi se vogliamo trovare il valore di 5 $ 3, guardiamo nella quinta colonna sulla terza riga (si noti che l'operatore non è necessariamente commutativo, quindi 5 $ 3non è necessariamente uguale a 3 $ 5. Vediamo qui che 5 $ 3 = 6(anche quello 3 $ 5 = 4).

Possiamo trovare <3>iniziando con [3], e quindi mentre l'elenco è unico, aggiungi il prodotto dell'ultimo elemento e il generatore (3). Abbiamo capito [3, 3 $ 3 = 2, 2 $ 3 = 1, 1 $ 3 = 3]. Ci fermiamo qui con il sottogruppo {3, 2, 1}.

Se si calcola <1>attraverso <6>vedrai che nessuno degli elementi del gruppo di generare l'intero gruppo. Pertanto, questo gruppo non è ciclico.

Casi test

L'input verrà dato come matrice, l'output come valore di decisione true / false.

[[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)

Ti verrà garantito che l'input è sempre un gruppo.

È possibile accettare input come valori indicizzati 0.


È consentito l'ingresso con indice 0? (ad es. [[0,1,2,3],[1,2,3,0],[2,3,0,1],[3,0,1,2]])?
Neil,

@Neil Sì; Ho dimenticato di specificare. Grazie!
HyperNeutrino,

5
Dovresti anticipare maggiormente le etichette degli elementi del tuo gruppo nei casi di test. In questo momento è sempre la prima riga e colonna della tabella [1..n]che può nascondere difetti in alcune risposte.
Lynn,

3
Sembra che sia sufficiente verificare se il gruppo è abeliano per superare i casi di test. Casi di test come Z_2 * Z_2 risolverebbero questo problema.
xnor

2
@HyperNeutrino: Questo è il prodotto diretto del gruppo a due elementi con se stesso, noto anche come il gruppo di quattro Klein .
Henning Makholm,

Risposte:


8

J , 8 byte

1:e.#@C.

Provalo online!

Spiegazione

1:e.#@C.  Input: matrix M
      C.  Convert each row from a permutation to a list of cycles
    #@    Number of cycles in each row
1:        Constant function 1
  e.      Is 1 a member of the cycle lengths?

Questo potrebbe anche essere 1 e.#@C., prima
Conor O'Brien,

Huh, J batte Jelly‽
Adám il

@ Adám Jelly non ha un builtin per convertire le permutazioni tra notazione diretta e ciclo. Potrei probabilmente aggiungerli come atomi più tardi, ottenendo ŒCL€1e6 byte in Jelly.
miglia,

8

Buccia , 11 10 9 byte

VS≡`ȯU¡!1

1-based. Restituisce l'indice di un generatore se ne esiste uno, altrimenti 0. Provalo online!

Spiegazione

V          Does any row r of the input satisfy this:
      ¡!    If you iterate indexing into r
   `    1   starting with 1
    ȯU      until a repetition is encountered,
 S≡         the result has the same length as r.


3

JavaScript (ES6), 52 byte

a=>a.some(b=>!a[new Set(a.map(_=>r=b[r],r=0)).size])


2

Gelatina , 15 byte

JŒ!ị@€µṂ⁼Jṙ'’$$

Provalo online!

Prima idea sciocca che mi è venuta in mente: controlla l'isomorfismo di Z n . (Questo codice è O (n!) ...)

JŒ!ị@€             Generate all ways to denote this group.
                     (by indexing into every permutation of 1…n)
      µṂ⁼          Is the smallest one equal to this?
         Jṙ'’$$      [[1 2 …  n ]
                      [2 3 …  1 ]    (the group table for Z_n)
                      [… … …  … ]
                      [n 1 … n-1]]

Questo è un approccio interessante; non ci avevo mai pensato! +1
HyperNeutrino,

2

R , 101 97 byte

function(m)any(sapply(1:(n=nrow(m)),function(x)all(1:n%in%Reduce(`[`,rep(list(m[x,]),n),x,T,T))))

Verifica tutti i casi di test

Questo semplicemente calcola <g>per ciascuno g \in Ge quindi verifica se G \subseteq <g>, quindi verifica se uno di quelli è vero. Tuttavia, poiché stiamo sempre applicando $ga destra, ci repliciamo m[g,](la griga th) e quindi ci indicizziamo in quella riga con il risultato dell'applicazione $g, accumulando i risultati anziché utilizzarli m[g,g$g]ogni volta, risparmiando circa 4 byte.


1

Clojure, 68 byte

#(seq(for[l % :when(apply distinct?(take(count l)(iterate l 0)))]l))

1

Python 2 , 82 byte

lambda A:len(A)in[len(set(reduce(lambda a,c:a+[A[a[-1]][n]],A,[n])))for n in A[0]]

Provalo online!

Viene immessa una tabella Cayley indicizzata 0; Uscita Vero / Falso per gruppo ciclico / non ciclico.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.