Чи є група циклічною?


21

Вступ

Ви можете пропустити цю частину, якщо вже знаєте, що таке циклічна група.

Група визначається набором та асоціативною бінарною операцією $(тобто (a $ b) $ c = a $ (b $ c). Існує рівно один елемент у групі, eде a $ e = a = e $ aдля всіх aу групі ( ідентичність ). Для кожного елемента aгрупи існує саме такий bтакий, що a $ b = e = b $ a( обернений ) .За кожними двома елементами a, bв групі, a $ bє в групі ( закриття ).

Ми можемо написати a^nзамість a$a$a$...$a.

Циклічна підгрупа , породжена будь-яким елементом aв групі , <a> = {e, a, a^2, a^3, a^4, ..., a^(n-1)}де nє порядок (розмір) підгрупи (якщо підгрупа не нескінченна).

Група є циклічною, якщо вона може бути породжена одним із її елементів.

Виклик

Давши таблицю Кейлі (таблицю продуктів) для кінцевої групи, визначте, циклічна вона чи ні.

Приклад

Давайте розглянемо наступну таблицю Кейлі:

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

(Це таблиця Кейлі для Діедральної групи 3, D_3).

Це 1-індексований, тому, якщо ми хочемо знайти значення 5 $ 3, ми дивимось у п’ятому стовпчику третього ряду (зауважимо, що оператор не обов'язково комутативний, тому 5 $ 3не обов'язково дорівнює 3 $ 5. Ми бачимо тут це 5 $ 3 = 6(також, що 3 $ 5 = 4).

Ми можемо знайти <3>, починаючи з [3], а потім, поки список унікальний, додаємо добуток останнього елемента та генератора (3). Ми отримуємо [3, 3 $ 3 = 2, 2 $ 3 = 1, 1 $ 3 = 3]. Ми зупиняємось тут на підгрупі {3, 2, 1}.

Якщо обчислювати <1>через <6>ви побачите , що жоден з елементів групи не породжують всю групу. Таким чином, ця група не циклічна.

Випробування

Вхід буде надано у вигляді матриці, вихід у вигляді значення "truthy / falesy".

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

Вам буде гарантовано, що вхід завжди буде груповим.

Ви можете приймати введення як 0-індексовані значення.


Чи дозволено 0-індексований вхід? (наприклад [[0,1,2,3],[1,2,3,0],[2,3,0,1],[3,0,1,2]])?
Ніл

@Neil Так; Я забув вказати. Спасибі!
HyperNeutrino

5
У тестових випадках слід передумувати мітки елементів вашої групи більше. Зараз перший рядок і стовпець таблиці завжди є, [1..n]що може ховати недоліки в деяких відповідях.
Лінн

3
Схоже, перевірити, чи достатньо абелевої групи для проходження тестових випадків. Тестові випадки, такі як Z_2 * Z_2, виправили б це.
xnor

2
@HyperNeutrino: Це прямий продукт двоелементної групи із самим собою - також відомий як чотиригрупа Кляйна .
Геннінг Макгольм

Відповіді:


8

J , 8 байт

1:e.#@C.

Спробуйте в Інтернеті!

Пояснення

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?

Це також може бути 1 e.#@C., fwiw
Conor O'Brien

Ага, J б'є Jelly Ad
Adám

@ Adám Jelly не має вбудованого для перетворення перестановок між прямими і цикличними позначеннями. Пізніше я міг би додати їх як атоми, зробивши ŒCL€1e6 байт в Jelly.
миль

8

Лушпиння , 11 10 9 байт

VS≡`ȯU¡!1

На основі 1. Повертає індекс генератора, якщо такий існує, 0 інакше. Спробуйте в Інтернеті!

Пояснення

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 байти

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


2

Желе , 15 байт

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

Спробуйте в Інтернеті!

Перша дурна ідея, яка прийшла в голову: перевірити наявність ізоморфізму на Z n . (Цей код є 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]]

Так це цікавий підхід; ніколи про це не думав! +1
HyperNeutrino

2

R , 101 97 байт

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

Перевірте всі тестові випадки

Це просто обчислює <g>для кожного, g \in Gа потім тестує if G \subseteq <g>, а потім перевіряє, чи є одне з них правдивим. Однак, оскільки ми завжди подаємо заявку $gправоруч, ми реплікуємо m[g,]( gтретій рядок) і потім індексуємо в цей рядок з результатом застосування $g, накопичуючи результати, а не використовуючи m[g,g$g]кожен раз, що економило близько 4 байтів.


1

Clojure, 68 байт

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.