유한 그룹의 부분 군 수 구하기


14

정의

이미 그룹 , 유한 그룹하위 그룹 의 정의를 알고 있으면이 부분을 건너 뛸 수 있습니다 .

여러 떼

추상 대수에서 그룹 은 튜플 (G, ∗) 이며 여기서 G 는 집합이고 는 함수 G × G → G 이므로 다음과 같습니다.

  • 폐쇄 : 모든 x, y 에서 G , x * yG 에도 있습니다 ( *G × G → G 함수 라는 사실에 의해 암시 됨 ).

  • 연관성 : 모든 X, Y, Z 에서의 G , (X * Y) * Z = X * (Y *의 z) .

  • 아이덴티티 : 소자 존재 E 에서 G가 되도록 모든 XG , X * E = X = E * X .

  • 역은 : 각각 X 에서 G , 요소가 존재하는 에서 G가 되도록 X * Y = E = X * Y , E는 이전 총알 시점에서 설명한 식별 소자이다.

유한 그룹

한정된 그룹은 그룹이다 (G *) (G)는 , 유한 즉 유한 한 많은 요소가있다.

부분 군

서브 그룹 (H *) 그룹 (G는, *) 되도록 인 H는 의 서브 세트 인 G (반드시 적절하지 서브셋) 및 (H는, *) 그룹 (즉, 만족 4 개 기준 위)도이다.

고려 면각 그룹 D 3 (G를, *) 여기서 G = {1, A, B, C, D, E}* (이와 같은 테이블이 호출 아래 정의 된 케일리 테이블 )

∗ | 1 ABCDE
-+ ----------------------
1 | 1 ABCDE
A | AB 1 12 월
B | B 1 AECD
C | CED 1 학사
D | DCEA 1B
전자 | EDCBA 1

이 그룹에서 ID는 1 입니다. 또한 와 B는 서로의 역수가 동안이다 (1) , C , DE는 각각 자신의 역함수는 (의 역수 1(1) 의 역, C는C 의 역수 D는D , 및 E의 역수 는 E )입니다.

이제 우리가 확인할 수 (H를, *) 여기서 H =를 {1, A, B}는 의 서브 그룹이다 (G *) . 폐쇄에 대해서는 아래 표를 참조하십시오.

∗ | 1 AB
-+ ----------
1 | 1 AB
A | AB 1
B | B 1 A

여기서 요소의 모든 가능한 쌍 H 미만 *가 있는 부재 수득 H를 .

H 의 요소는 G의 요소 이므로 연관성은 검사 할 필요가 없습니다 .

동일성은 1 입니다. 그룹 ID와 동일해야합니다. 또한 그룹의 ID는 고유해야합니다. (이것을 증명할 수 있습니까?)

역수의 경우 A 의 역수 가 B 이며 H 의 멤버 인지 확인하십시오 . B 의 역수 는 A 이며 H 의 멤버이기도합니다 . 1 의 역 은 여전히 ​​그 자체이므로 점검 할 필요가 없습니다.


직무

기술

유한 그룹 (G, ∗)이 주어지면 해당 하위 그룹의 수를 찾으십시오.

입력

그룹 (G, ∗)의 경우 n × n 크기의 2D 배열을받습니다. 여기서 nG 의 요소 수입니다 . 색인 0이 ID 요소 라고 가정하십시오 . 2D 배열은 곱셈표를 나타냅니다. 예를 들어 위 그룹의 경우 다음 2D 배열을 받게됩니다.

[[0, 1, 2, 3, 4, 5],
[1, 2, 0, 4, 5, 3],
[2, 0, 1, 5, 3, 4],
[3, 5, 4, 0, 2, 1],
[4, 3, 5, 1, 0, 2],
[5, 4, 3, 2, 1, 0]]

예를 들어, 볼 수있는 3 * 1 = 5 때문에 a[3][1] = 5여기서, a상기 2 차원 배열이다.

노트:

  • 1 인덱스 2D 배열을 사용할 수 있습니다.
  • ID의 행과 열은 생략 할 수 있습니다.
  • 적합하다고 생각되는 다른 형식을 사용할 수도 있지만 일관성이 있어야합니다. (즉, 마지막 색인이 ID 등이되기를 원할 수 있습니다.)

산출

그룹의 하위 그룹 수를 나타내는 양수입니다.

예를 들어, 위 그룹의 경우 (H, ∗)H = 때마다 (G, ∗) 의 하위 그룹입니다.

  • {1}
  • {1, A, B}
  • {1, C}
  • {1, D}
  • {1, E}
  • {1, A, B, C, D, E}

따라서 6 개의 하위 그룹이 있으며이 예제의 출력은이어야합니다 6.


힌트

내가 링크 한 기사를 읽을 수 있습니다. 이 기사에는 유용한 그룹 및 하위 그룹에 대한 이론이 포함되어 있습니다.


채점

이것은 입니다. 가장 적은 바이트 수로 승리하십시오.


오, e 는 중간 결과뿐만 아니라 정체성 요소를 구체적으로 언급한다는 것이 분명 하지 않았습니다.
orlp

@orlp는 명확히했다.
Leaky Nun

0identity 요소 를 호출 하려는 경우 연산자가 곱셈 이라고 설명하는 것이 혼란 스럽습니다 .
Neil

@Neil eh ... 컨벤션이 충돌 할 때.
Leaky Nun

1
2D 목록의 요소가 행 / 열의 인덱스와 동일하다고 가정했습니다. 그렇지 않으면 어떤 행 / 열이 어느 행과 함께되는지 어떻게 알 수 있습니까?
Ørjan Johansen

답변:


8

Mathematica, 62 48 바이트

Count[Subsets@First@#,x_/;Union@@#[[x,x]]==x]-1&

1- 인덱스 2D 어레이를 기대하는 순수한 기능. Counts 그룹 조작에서 닫은 입력 배열 SubsetsFirst행 수 . 여기에는 빈 세트가 포함되므로을 뺍니다 1. 그룹 작업 에서 닫히는 유한 그룹의 비어 있지 않은 하위 집합은 실제로 하위 그룹 이며 그 반대도 마찬가지입니다.

엄밀히 말하면 x그룹 작업 에서 하위 집합 이 닫혀 있는지 확인하지 않고 곱셈 테이블을 하위 집합으로 제한하고 x정확하게의 요소가 포함되어 있는지 확인합니다 x. 분명히 이것은 x그룹 작업과 관련하여 닫혀 있음을 의미합니다 . 반대로, 모든 하위 그룹 x에는 제한된 곱셈표에 나타나는 요소의 하위 집합 이 포함 1되므로 그룹 작업에서 닫히므로이 값은와 같아야 합니다.xxx


4

하스켈 , 79 바이트

기본적으로 ngenisis의 Mathematica 방법의 포트. (0 인덱스 배열을 사용하는 것을 제외하고)

c의 목록을 가져 와서 Int정수를 반환합니다.

c g=sum[1|l<-foldr(\r->([id,(r!!0:)]<*>))[[]]g,and[g!!x!!y`elem`l|x<-l,y<-l]]-1

온라인으로 사용해보십시오!

Int의 곱셈을 나타내는 행 (외부 목록) 및 열과 번호가 동일 하다고 가정합니다 . 따라서 0이 ID이므로 첫 번째 열은 행의 인덱스와 동일합니다. 이를 통해 첫 번째 열의 항목을 사용하여 서브 세트를 구성 할 수 있습니다.

작동 원리

  • c 주요 기능입니다.
  • g 목록 목록으로 그룹 배열입니다.
  • l요소의 하위 집합입니다. 서브 세트 목록은 다음과 같이 구성됩니다.
    • foldr(\r->([id,(r!!0:)]<*>))[[]]g의 행에 함수를 접습니다 g.
    • r는의 행이며 g, 첫 번째 (0) 요소는 포함 (r!!0:)되거나 포함 되지 않을 수있는 요소 ( ) 로 추출됩니다 id.
    • <*> 이 행의 선택 사항을 다음 행과 결합합니다.
  • and[g!!x!!y`elem`l|x<-l,y<-l]l여러 요소가에 있는지 여부에 따라 각 요소 쌍을 테스트합니다 l.
  • sum[1|...]-1 빈 부분 집합을 제외하고 테스트를 통과 한 부분 집합을 계산합니다.

3

젤리 , 17 16 바이트

ETH 프로덕션 덕분에 1 바이트 ( LR → J)

ị³Z⁸ịFḟ
JŒPÇÐḟL’

JŒPÇÐḟL’  main link. one argument (2D array)
J         [1,2,3,...,length of argument]
 ŒP       power set of ^
    Ðḟ    throw away elements that pass the test...
   Ç      in the helper link
      L   length (number of elements that do not pass)
       ’  decrement (the empty set is still closed under
          multiplication, but it is not a subgroup, as
          the identity element does not exist.)

ị³Z⁸ịFḟ   helper link. one argument (1D indexing array)
ị³        elements at required indices of program input (2D array)
  Z       transpose
   ⁸ị     elements at required indices of ^
     F    flatten
      ḟ   remove elements of ^ that are in the argument given
          if the set is closed under multiplication, this will
          result in an empty set, which is considered falsey.

온라인으로 사용해보십시오! (1 인덱스)


바이트를 저장하는 J대신에 할 수 있습니다 LR:-)
ETHproductions

@ETHproductions 와우, 그것을 발견해 주셔서 감사합니다.
Leaky Nun

3

파이썬 2, 297 215 바이트

from itertools import*
T=input()
G=T[0]
print sum(all(T[y][x]in g for x,y in product(g,g))*all(any(T[y][x]==G[0]==T[x][y]for y in g)for x in g)*(G[0]in g)for g in chain(*[combinations(G,n)for n in range(len(G)+1)]))

온라인으로 사용해보십시오

이 프로그램은가없는 예제 그룹에서 작동 ==T[x][y]하지만 여전히 필요하다고 확신합니다.

편집 : 이제 G 의 항등 요소 가 항상 첫 번째 요소라고 가정합니다 .


언 골프 드 :

from itertools import*
T=input()
G=T[0]
def f(x,y):return T[y][x]                                           # function
def C(g):return all(f(x,y)in g for x,y in product(g,g))             # closure
def E(g):return[all(f(x,y)==y for y in g)for x in g]                # identity

a=E(G)
e=any(a)
e=G[a.index(1)]if e else-1                                          # e in G

def I(G):return all(any(f(x,y)==e==f(y,x)for y in G)for x in G)     # inverse

#print e
#print C(G),any(E(G)),I(G)

#for g in chain(*[combinations(G,n)for n in range(len(G)+1)]):      # print all subgroups
#   if C(g)and I(g)and e in g:print g

print sum(C(g)*I(g)*(e in g)for g in chain(*[combinations(G,n)for n in range(len(G)+1)]))

Ungolfed TIO

로 변경 -1하면 제외 그룹 요소를 무료로 지원할 수 있습니다 ''.


왜 신원을 확인합니까? 정체성은 첫 번째 요소임을 보장합니다. 첫 번째 요소없이 모든 조합을 만들고 각 요소에 첫 번째 요소를 추가하십시오.
orlp

"0이 ID 요소라고 가정하십시오."
orlp

예, 그러나 이것이 목록에서 첫 번째를 의미하는 것은 아닙니다. 0인덱스가 아니라 예제 의 숫자 에 대해 이야기하고 있다고 생각했습니다 .
mbomb007

@ mbomb007 그것은 분명 인덱스입니다
Leaky Nun
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.