Sonlu bir grubun alt gruplarının sayısını bulma


14

Tanımlar

Grupların , sonlu grupların ve alt grupların tanımlarını zaten biliyorsanız bu bölümü atlayabilirsiniz .

Gruplar

Soyut cebirde, bir grup bir demettir (G, ∗) , burada G bir kümedir ve G × G → G fonksiyonudur , böylece aşağıdakiler geçerlidir:

  • Kapatma: G'deki tüm x, y için , x ∗ y de G'dir ( bir G × G → G işlevi olduğu gerçeğiyle ima edilir ).

  • Birliktelik: G'deki tüm x, y, z için , (x ∗ y) ∗ z = x ∗ (y ∗ z) .

  • Kimlik: bir eleman vardır e de G öyle ki tüm x olarak G , X * e = x = E * x .

  • Ters: her biri için , x in G , bir element vardır y de G , öyle ki x * y = e = Y * X , E önceki madde alanına bahsedilen kimlik elemanıdır.

Sonlu gruplar

Bir sonlu grup bir grup olduğu (G *) G , sonlu yani sonlu sayıda elemana sahiptir.

Altgruplar

Bir alt-grup (H *), bir grup (G *) olacak şekildedir , H bir alt kümesidir G (mutlaka doğru değildir alt kümesi) ve (H *) , bir grup (örneğin, tatmin 4 kriter ile elde edilmiş) aynı zamanda.

Örnekler

Düşünün dihedral grubu D 3 (G *) burada G = {1, A, B, C, D, E} ve * (böyle bir tablo olarak adlandırılır, aşağıda tanımlandığı gibidir , Cayley tablosu ):

∗ | 1 ABCDE
- + ----------------------
1 | 1 ABCDE
A | AB 1 ARALIK
B | B 1 AECD
C | CED 1 BA
D | DCEA 1 B
E | EDCBA 1

Bu grupta kimlik 1'dir . Aynı zamanda, bir ve B birbirinden tersleri ise olan 1 , , D ve E , sırasıyla kendilerine tersidir (ters 1 olan 1 tersi, C olan Cı- , ters D olan D ve ters E olup E ).

Şimdi, doğrulayabilir (H *) burada H = {1, A, B} bir alt grubudur , (G *) . Kapatma için aşağıdaki tabloya bakın:

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

burada öğelerin tüm olası çift H altında * bir üye elde H .

Birliktelik kontrol gerektirmez, çünkü H elemanları G elemanlarıdır .

Kimlik 1'dir . Bu, grup kimliğiyle aynı olmalıdır. Ayrıca, bir gruptaki kimlik benzersiz olmalıdır. (Bunu kanıtlayabilir misin?)

Ters için, bir ters kontrol A olan B üyesidir, H . Ters B olan bir de bir üyesi olan, H . 1'in tersi hala kendisidir, bu da kontrol gerektirmez.


Görev

Açıklama

Sonlu bir grup (G, ∗) verildiğinde, alt gruplarının sayısını bulun.

Giriş

Bir grup (G, ∗) için , n × n boyutunda bir 2D dizi alırsınız ; burada n , G'deki öğe sayısıdır . Dizinin 0kimlik öğesi olduğunu varsayalım . 2B dizi çarpım tablosunu temsil edecektir. Örneğin, yukarıdaki grup için aşağıdaki 2D dizisini alırsınız:

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

Örneğin, 3 ∗ 1 = 5 olduğunu görebilirsiniz, çünkü yukarıdaki 2D dizi a[3][1] = 5nerede a.

Notlar:

  • 1 dizinli 2B dizi kullanabilirsiniz.
  • Kimlik için satır ve sütun atlanabilir.
  • Uygun gördüğünüz gibi başka biçimler de kullanabilirsiniz, ancak tutarlı olmalıdır. (yani son dizinin bunun yerine kimlik olmasını isteyebilirsiniz, vb.)

Çıktı

Gruptaki alt grupların sayısını temsil eden pozitif bir sayı.

Örneğin, yukarıdaki grup için (H, ∗) , H = olduğunda , (G, ∗) ' nin bir alt grubudur.

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

Bu nedenle, 6 alt grup vardır ve bu örnek için çıktınız olmalıdır 6.


İpuçları

Bağlantı verdiğim makaleleri okuyabilirsiniz. Bu makaleler sizin için yararlı olabilecek gruplar ve alt gruplar hakkında teoremler içerir.


puanlama

Bu . En düşük bayt sayımı kazanır.


Ah, e'nin sadece herhangi bir ara sonucu değil, özellikle kimlik unsurunu ifade ettiği açık değildi.
orlp

@ orlp açıklığa kavuşturuldu.
Leaky Nun

0Kimlik öğesini arayacaksanız , operatörün çarpma olarak tanımlanması kafa karıştırıcıdır ...
Neil

@Neil eh ... sözleşmeler çatıştığında.
Leaky Nun

1
2B listesindeki öğelerin satırlarının / sütunlarının endeksleriyle aynı olduğunu varsaydım, aksi takdirde hangi satırın / sütunun hangisiyle gittiğini nasıl belirlersiniz?
Ørjan Johansen

Yanıtlar:


8

Mathematica, 62 48 bayt

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

1 indeksli 2B dizi bekleyen saf işlev. Countsayısını s Subsetsait Firstbir grup işlemi altında kapatılır girdi dizisinin satır. Bu boş seti içereceğinden çıkarırız 1. Grup işlemi altında kapatılan sonlu bir grubun boş olmayan bir alt kümesinin aslında bir alt grup (ve tanım gereği tersi) olduğuna dikkat edin .

Kesinlikle konuşmak gerekirse, alt kümenin xgrup işlemi altında kapalı olup olmadığını kontrol etmiyorum , çarpım tablosunu alt kümeyle kısıtlıyorum ve xtam olarak öğelerini içerdiğini kontrol ediyorum x. Bu açıkça x, grup operasyonu ile ilgili kapalı olduğunu gösterir. Bunun tersine, herhangi bir alt grup , kısıtlanmış çarpım tablosunda görünen öğelerin bir alt kümesini xiçerecek 1ve bu şekilde xolacaktır xve grup işlemi altında kapatıldığından, eşit olmalıdır x.


4

Haskell , 79 bayt

Temelde bir ngenisis Mathematica yöntemi limanı. (Dışında 0 dizinli diziler kullanıyorum.)

cInts listelerinin listesini alır ve bir tamsayı döndürür.

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

Çevrimiçi deneyin!

S'nin Intçarpımlarını gösteren satırlarla (dış listeler) ve sütunlarla aynı şekilde numaralandırıldığı varsayılmaktadır . Bu nedenle, 0 kimlik olduğundan, ilk sütun satırların endeksleri ile aynıdır. Bu, alt kümeleri oluşturmak için ilk sütunun girişlerinin kullanılmasına izin verir.

Nasıl çalışır

  • c ana işlevdir.
  • g bir liste listesi olarak grup dizisidir.
  • löğelerin bir alt kümesidir. Alt kümelerin listesi şu şekilde oluşturulur:
    • foldr(\r->([id,(r!!0:)]<*>))[[]]gişlevi satırlarının üzerine katlar g.
    • rgilk (0) öğesi, ( (r!!0:)) dahil edilebilecek ( ) olabilir veya eklenmeyecek bir öğe olarak ayıklanan bir satırdır id.
    • <*> bu satırın seçeneklerini aşağıdaki satırlarla birleştirir.
  • and[g!!x!!y`elem`l|x<-l,y<-l]her bir öğe çifti liçin çoklu öğelerinin bulunup bulunmadığını test eder l.
  • sum[1|...]-1 boş altkümesi hariç, testi geçen altkümeleri sayar.

3

Jöle , 17 16 bayt

ETHproductions ( LR → J) sayesinde 1 bayt

ị³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.

Çevrimiçi deneyin! (1 endeksli)


Bir bayt kaydetmek Jyerine yapabilirsiniz LR:-)
ETHproductions

@ETHproductions wow, bunu tespit ettiğiniz için teşekkürler.
Leaky Nun

3

Python 2, 297 215 bayt

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

Çevrimiçi deneyin

Bu program olmadan örnek grup için çalışır ==T[x][y], ancak yine de gerekli olduğundan eminim.

Düzenleme: Şimdi G kimlik öğesinin her zaman ilk olduğunu varsayar .


Ungolfed:

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

Kurtulmamış TIO

Negatif grup elemanları değiştirerek hiçbir ücret ödemeden desteklenebilir -1için ''.


Neden kimliği kontrol ediyorsunuz? Kimliğin ilk unsur olduğu garanti edilmektedir. Tüm kombinasyonları ilk eleman olmadan yapın ve ilk kombinasyonu her kombinasyona ekleyin.
orlp

"0'ın kimlik unsuru olduğunu varsayın."
orlp

Evet, ama bu listede ilk olduğu anlamına gelmiyor. Ben 0indeks değil, örnek sayısı hakkında konuştuğunu düşündüm .
mbomb007

@ mbomb007 açıkça endeksi
Leaky Nun
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.