Знайдіть кількість підгруп кінцевої групи


14

Визначення

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

Групи

В абстрактній алгебрі, А група є кортеж (G, *) , де G являє собою набір і * є функцією G × G → G таким чином, що має місце наступне:

  • Закриття: для всіх x, y в G , x ∗ y також у G (мається на увазі через те, що - функція G × G → G ).

  • Асоціативність: для всіх x, y, z в G , (x ∗ y) ∗ z = x ∗ (y ∗ z) .

  • Ідентичність: існує елемент e в G такий, що для всіх x в G , x ∗ e = x = e ∗ x .

  • Зворотне: для кожного x у G існує елемент y в G такий, що x ∗ y = e = y ∗ x , де e - ідентичний елемент, згаданий у попередній точці кулі.

Кінцеві групи

Кінцева група являє собою групу (G, *) , де G кінцева, тобто має кінцеве число елементів.

Підгрупи

Підгрупа (Н, *) групи (G, *) така , що Н являє собою підмножина G (не обов'язково власне підмножина) і (H, *) також є групою (тобто задовольняє критеріям 4 вище).

Приклади

Розглянемо двогранну групу D 3 (G, ∗), де G = {1, A, B, C, D, E} і визначено нижче (така таблиця називається таблицею Кейлі ):

∗ | 1 ABCDE
- + ----------------------
1 | 1 ABCDE
А | AB 1 DEC
Б | B 1 AECD
C | CED 1 BA
Д | DCEA 1 B
Е | EDCBA 1

У цій групі особистість - 1 . Крім того, A і B є оберненими один до одного, тоді як 1 , C , D і E є інверсами самих себе відповідно (обернена 1 дорівнює 1 , обернена C - C , обернена D - D , і обернена E - E ).

Тепер ми можемо перевірити, що (H, ∗) де H = {1, A, B} є підгрупою (G, ∗) . Для закриття зверніться до таблиці нижче:

∗ | 1 AB
- + ----------
1 | 1 AB
А | AB 1
Б | Б 1 А

де всі можливі пари елементів в Н при * дають член в H .

Асоціативність не вимагає перевірки, так як елементи H є елементами G .

Особистість - 1 . Це має бути однаково з груповою ідентичністю. Також особа в групі повинна бути унікальною. (Ви можете це довести?)

Для зворотного, перевірити , що зворотна А це В , який є членом H . Зворотний B є , який також є членом H . Інверсія 1 все ще є самою, що не вимагає перевірки.


Завдання

Опис

Давши скінчену групу (G, ∗) , знайдіть кількість її підгруп.

Вхідні дані

Для групи (G, *) , ви отримаєте 2D масив розміру N × N , де N є число елементів в G . Припустимо, що індекс 0- елемент ідентичності. 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, де a2D масив вище.

Примітки:

  • Можна використовувати 1-індексований 2D масив.
  • Рядок і стовпець для ідентичності можна опустити.
  • Ви можете використовувати інші формати, як вважаєте за потрібне, але він повинен бути послідовним. .

Вихідні дані

Позитивне число, що представляє кількість підгруп у групі.

Наприклад, для вищезгаданої групи (H, ∗) є підгрупою (G, ∗), коли H =

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

Тому існує 6 підгруп, і ваш результат для цього прикладу повинен бути 6.


Підказки

Ви можете прочитати статті, до яких я посилався. Ці статті містять теореми про групи та підгрупи, які можуть бути корисними для вас.


Оцінка балів

Це . Відповідь з найнижчою кількістю виграшних байтів.


Про , це було не ясно , мені е конкретно відноситься до одиничного елементу, а не тільки який - або проміжний результат.
orlp

@orlp уточнив.
Leaky Nun

Якщо ви збираєтеся зателефонувати 0до ідентифікаційного елемента, то оператор може заплутатись як опис множення ...
Ніл,

@Neil eh ... коли конвенції зіткнулися.
Лина монашка

1
Я припускав, що елементи в двовимірному списку ідентичні індексам їх рядків / стовпців, інакше як би ви навіть визначили, який рядок / стовпець йде з яким?
Ørjan Johansen

Відповіді:


8

Математика, 62 48 байт

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

Чиста функція очікує 1-індексований 2D масив. Countе роки число Subsetsз Firstрядка вхідного масиву, замкнутих відносно групової операції. Оскільки це буде включати порожній набір, віднімаємо 1. Зауважимо, що непорожній підмножина кінцевої групи, яка закрита під груповою операцією, насправді є підгрупою (і навпаки, за визначенням).

Строго кажучи, я не перевіряю, що підмножина xзакрита під час групової операції, я обмежую таблицю множення на підмножину xі перевіряю, чи містить вона точно елементи x. Зрозуміло, що це означає, що xзакрито стосовно групової роботи. І навпаки, будь-яка підгрупа xбуде містити 1і, таким чином, xбуде підмножиною елементів, що з’являються в таблиці обмеженого множення, і оскільки xвона закрита під груповою операцією, вона повинна дорівнювати x.


4

Хаскелл , 79 байт

В основному порт методу Mathematica ngenisis. (За винятком випадків, коли я використовую 0-індексовані масиви.)

cприймає список списків Ints і повертає ціле число.

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

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

Передбачається, що Ints пронумеровані так само, як рядки (зовнішні списки) та стовпці, що показують їх множення. Таким чином, оскільки 0 - тотожність, перший стовпець такий самий, як і індекси рядків. Це дозволяє використовувати записи першого стовпця для побудови підмножини.

Як це працює

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

1 байт завдяки ETHproductions ( 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

Python 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)]))

Безгольовий ТІО

Негативні елементи групи можна підтримувати безкоштовно, змінивши -1на ''.


Чому ви перевіряєте особистість? Ідентичність гарантована як перший елемент. Просто складіть всі комбінації без першого елемента та додайте перший елемент до кожної комбінації.
orlp

"Припустимо, що 0 - елемент ідентичності."
orlp

Так, але це не означає, що він перший у списку. Я думав, що мова йде про число 0для прикладу, а не про індекс.
mbomb007

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