グループは周期的ですか?


21

前書き

循環グループとは何かをすでに知っている場合は、この部分をスキップできます。

グループが設定され、連想バイナリ操作によって定義される$(、である(a $ b) $ c = a $ (b $ c)グループに正確に1つの要素が存在する。eここで、a $ e = a = e $ a全てのためのaグループ(で識別)。すべての要素についてはa、グループ内の存在正確に一つのbようにa $ b = e = b $ a) 。a, bグループ内の2つの要素ごとに、a $ bに、グループ内にあります(closure)。

私たちは書くことができます a^n代わりにa$a$a$...$a

任意の要素によって生成された巡回サブグループa、グループ内である<a> = {e, a, a^2, a^3, a^4, ..., a^(n-1)}場合n(サブグループが無限大でない限り)サブグループの順序(サイズ)です。

グループは、その要素の1つによって生成できる場合、周期的です。

チャレンジ

有限グループのCayleyテーブル(製品テーブル)が与えられたら、それが周期的かどうかを判断します。

次の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

(これは、Dihedral Group 3、D_3のCayleyテーブルです)。

これは、我々はの値を見つけるにしたいそうだとすれば、1インデックスである5 $ 3ので、我々は、オペレータが必ずしも可換ではないこと(注3行目5列目で見て、に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>と、グループ内のどの要素もグループ全体を生成しないことがわかります。したがって、このグループは循環的ではありません。

テストケース

入力は行列として与えられ、出力は真実/偽の決定値として与えられます。

[[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]])?
ニール

@ニールはい。指定するのを忘れました。ありがとう!
ハイパーニュートリノ

5
テストケースでは、グループ要素のラベルをさらに無効にする必要があります。現在、テーブルの最初の行と列は常に[1..n]いくつかの答えの欠陥を隠している可能性があります。
リン

3
グループがアーベル型であるかどうかをチェックして、テストケースに合格するように見えます。Z_2 * Z_2のようなテストケースはこれを修正します。
xnor

2
@HyperNeutrino:これは、2要素グループとそれ自体の直接の積です-Klein four-groupとしても知られています。
ヘニングマクホルム

回答:


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がジェリーを破る
アダム

@AdámJellyには、直接表記とサイクル表記の間で順列を変換する組み込み機能がありません。後で原子として追加してŒCL€1e、Jellyで6バイトにすることができます。
マイル

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

R101 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,]gth番目の行)を複製し、applyの結果でその行にインデックスを付けます。毎回$g使用するのではなく、結果を蓄積して、m[g,g$g]約4バイト節約します。


1

Clojure、68バイト

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.