Bu örgüler eşit mi?


13

Eğer Örgü-Teori I aşina değilseniz okumanızı öneririz bu ilk. Bu soru, en azından eldeki kavramlara aşina olduğunuzu ve grup teorisini iyi bildiğinizi varsayar.

Yi, σ n ki burada örgü olmak N fazla üstte çaprazlanmış th kordon (bir dizine) n + 1 inci zincir ve σ N - tersi olduğu σ n O olduğu ( n + 1 inci iplik sahasına n inci kordon).

Örgü grubu B , n , sonra tarafından oluşturulan 1 σ, 2 σ, 3 ,. . . , σ n-1 > 'dir . Bu nedenle her örgü B n σ-örgü bir ürün olarak yazılabilir. 1


Bir gruptaki iki örgünün eşit olup olmadığını belirlemek basit bir iş değildir. Σ 1 σ 3 = σ 3 σ 1 olduğu oldukça açık olabilir , ancak örneğin σ 2 σ 1 σ 2 = σ 1 σ 2 σ 1 gibi daha az açıktır . 2

Yani soru "İki örgünün aynı olup olmadığını nasıl belirleyebiliriz?" Sorusudur. Her iki örnek de bunun bir kısmını temsil ediyor. Genel olarak Artin'in ilişkileri olarak adlandırılan aşağıdaki ilişkiler doğrudur:

  • σ i σ j = σ j σ i ; i - j> 1

  • σ i σ i + 1 σ i = σ i + 1 σ i σ i + 1

Eşit örgülerin eşit olduğunu kanıtlamak için bu iki ilişkiyi grup aksiyomları ile birlikte kullanabiliriz. Bu nedenle, bu ilişkilerin tekrar tekrar uygulanması durumunda iki örgü eşittir ve grup aksiyomları bunu gösterebilir.

Görev

İki örgüyü almak ve eşit olup olmadığını belirlemek için bir program veya işlev yazacaksınız. İsteğe bağlı olarak, grubun sırasını temsil eden pozitif bir tamsayı da alabilirsiniz.

Bu bir sorusudur, bu nedenle cevaplar bayt cinsinden puanlandırılacak, daha az bayt daha iyi olacaktır.

Giriş ve çıkış

Bir Örgüyü sıralı bir jeneratör listesi (veya herhangi bir eşdeğer yapı, örneğin vektör) olarak temsil etmelisiniz. Jeneratörleri makul herhangi bir biçimde temsil edebilirsiniz (örn. Bir tamsayı, iki tamsayı pozitif bir tamsayı ve bir boole).

Standart kurallarına eşit olarak , iki farklı değerden birini çıkarmalısınız, bir reddetme kabul et.

Test Durumları

[],       []              -> True
[1,-1],   []              -> True
[1,2,1],  [2,1,2]         -> True
[1,3],    [3,1]           -> True
[1,3,2,1],[3,2,1,2]       -> True
[1,4,-4,3,2,1], [3,2,1,2] -> True
[2,2,1],  [2,1,2]         -> False
[1,2,-1], [-1,2,1]        -> False
[1,1,1,2],[1,1,2]         -> False

1: Not bu ise B , n tatmin bir grup eden örgü grubuna işlem tüm özelliklerini olduğu değil değişmeli ve böylece grup değişmeli değildir.

2: Bunu kendiniz doğrulamak istiyorsanız, her iki tarafa σ 1 - uygulamanızı öneririm , ikisini kağıda çizerseniz veya gerçek dizelerle modellerseniz, bunun neden böyle olduğu anlaşılmalıdır.


Örgü teorisine aşina değilim, bu yüzden mutlak anlamsızca
VTC

2
Bazı test durumlarımız olabilir mi lütfen?
HyperNeutrino

@HyperNeutrino Üzgünüz onları eklemeyi unuttum. Şimdi eklendi. Daha fazlasını önermekten çekinmeyin.
Ad Hoc Garf Hunter

@WheatWizard test senaryosu önerisi:[],[]
Pavel

Önerilen Test Durumu:[1, 4, -4, 3, 2, 1], [3, 2, 1, 2] => TRUE
HyperNeutrino

Yanıtlar:


11

Haskell , 190 bayt

i!j|j<0=reverse$map(0-)$i!(-j)|i==j=[i,i+1,-i]|i+1==j=[i]|i+j==0=[j+1]|i+j==1=[-j,-i,j]
_!j=[j]
j%(k:a)|j+k==0=a
j%a=j:a
i&a=foldr(%)[]$foldr((=<<).(!))[i]a
a?n=map(&a)[1..n]
(a#b)n=a?n==b?n

Çevrimiçi deneyin!

Nasıl çalışır

Let F n olmak ücretsiz grup üzerinde n jeneratörleri x 1 , ..., x n . Örgü teoride ilk sonuçları (Emil Artin biri Zöpfe der Theorie 1925) biz birebir olması homomorfizmi f : B nAut ( F n ) aksiyon f σ i σ ait I ile tanımlanmaktadır

f σ i ( x i ) = x i x i + 1 x i −1 ,
f σ i ( x i + 1 ) = x i ,
f σ i ( x j ) = j için x j ∉ { i , i + 1}.

Ters f σ i −1 tarafından verilir

f σ i −1 ( x i ) = x i + 1 ,
f σ i −1 ( x i + 1 ) = x i + 1 −1 x i x i + 1 ,
f σ i −1 ( x j ) = x j için j ∉ { ı , ı 1 +}

ve elbette bileşim f ab = f af b ile verilir .

A = bB n olup olmadığını test etmek için, tüm i = 1,…, n için f a ( x i ) = f b ( x i ) ' nin test edilmesi yeterlidir . Bu çok daha basit bir sorundur F n sadece iptal nasıl bilmek gerekir, x i ile x i -1 .

Kodda:

  • i!jf σ i ( x j ) 'yi hesaplar (burada tersi temsil eden ya ida jnegatif olabilir),
  • foldr(%)[] serbest grupta indirim yapar,
  • i&af a ( x i ) 'yi hesaplar ,
  • a?n[ f a ( x 1 ),…, f a ( x n )] hesaplar ,
  • ve (a#b)neşitlik test bir = b içinde B , n .

4

Python 2 , 270 263 260 250 249 241 bayt

def g(b,i=0):
 while i<len(b)-1:
  R,s=b[i:i+2]
  if R<0<s:b[i:i+2]=[[],[s,-R,-s,R],[s,R]][min(abs(R+s),2)];i=-1
  i+=1
 return b
def f(a,b):
 b=g(a+[-v for v in b][::-1]);i=0
 while i<len(b)and b[0]>0:b=b[1:]+[b[0]];i+=1   
 return g(b)==[]

Çevrimiçi deneyin!

Örgü izotop problemini çözmek için 'alt kelime tersine çevirme' yönteminin uygulanması: a = b iff ab ^ -1 = kimlik.

Algoritma: Örgü izotop problemine etkin çözümler, Patrick Dehornoy ; ilgisini çekebilecek diğer algoritmaları açıklar ...

Bu algoritma, listede soldan sağa doğru yürüterek, negatif bir sayı ve ardından pozitif bir sayı arayarak çalışır; yani, i, j> 0 olan x i -1 x j formunun bir alt kelimesi .

Aşağıdaki denklikleri kullanır:

x i -1 x j = x j x i x j -1 x i -1 i = j + 1 veya j = i + 1 ise

x i -1 x j = i == j ise kimlik (boş liste)

x i -1 x j = x j x i -1 aksi takdirde.

Tekrarlanan uygulama ile, w1 + w2her öğesinin w1pozitif ve her öğesinin w2negatif olduğu formun bir listesi ile sonuçlanır . (Bu işlevin eylemidir g).

Daha sonra glisteye ikinci kez başvuruyoruz w2 + w1; orijinal liste kimliğe eşitse sonuç listesi boş olmalıdır.

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.