小组是周期性的吗?


21

介绍

如果您已经知道什么是循环组,则可以跳过此部分。

一个组是由一个集合和一个关联的二进制运算定义的$(也就是说,(a $ b) $ c = a $ (b $ c)。该组e中仅存在一个元素,而a $ e = a = e $ a对于该组中的所有元素a恒等)。对于a该组中的每个元素,都存在一个精确的b使得a $ b = e = b $ a)元素对于组中的每个两个元素a, ba $ b都位于组中(闭包)。

我们可以a^n代替来写a$a$a$...$a

通过任何元件产生的循环子a组中的是<a> = {e, a, a^2, a^3, a^4, ..., a^(n-1)},其中n是子组的顺序(大小)(除非该亚型是无限的)。

如果一个组可以由其元素之一生成,则它是循环的。

挑战

给定有限群的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第3组D_3的Cayley表)。

这是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>您会发现该组中没有任何元素会生成整个组。因此,该组不是循环的。

测试用例

输入将作为矩阵给出,输出作为真/假决策值。

[[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:这是二元素组与其本身的直接乘积-也称为Klein四组
Henning Makholm

Answers:


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
康纳尔奥布莱恩

J,J击败Jelly‽
Adám17年

@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,然后测试是否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))

1

Python 2,82字节

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

在线尝试!

输入0索引的Cayley表;循环/非循环组的True / False输出。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.