Sind diese Zöpfe gleich?


13

Wenn Sie nicht mit der Braid-Theorie vertraut sind, empfehle ich Ihnen, diese zuerst zu lesen . Diese Frage setzt voraus, dass Sie zumindest mit den vorliegenden Konzepten vertraut sind und dass Sie mit der Gruppentheorie gut vertraut sind

Definieren wir σ n als das Geflecht, in dem der n- te Strang (One indexed) von oben den n + 1- ten Strang kreuzt , und σ n - als das Inverse von σ n (das ist das n + 1- te) Strang kreuzt den n- ten Strang).

Der Zopfgruppe B n wird dann durch 1 , σ 2 , σ 3 ,. . . , Σ n-1 > . Somit kann jedes Geflecht auf B n als Produkt der σ-Geflechte geschrieben werden. 1


Es ist keine einfache Aufgabe, festzustellen, ob zwei Zöpfe einer Gruppe gleich sind. Es mag ziemlich offensichtlich sein, dass σ 1 σ 3 = σ 3 σ 1 ist , aber es ist etwas weniger offensichtlich, dass zum Beispiel σ 2 σ 1 σ 2 = σ 1 σ 2 σ 1 ist . 2

Die Frage lautet also "Wie können wir feststellen, ob zwei Zöpfe gleich sind?". Nun, die beiden obigen Beispiele zeigen jeweils ein bisschen davon. Im Allgemeinen sind die folgenden Beziehungen, die als Artins Beziehungen bezeichnet werden, wahr:

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

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

Wir können diese beiden Beziehungen in Verbindung mit den Gruppenaxiomen verwenden, um zu beweisen, dass gleiche Zöpfe gleich sind. Somit sind zwei Zöpfe gleich, wenn die wiederholte Anwendung dieser Beziehungen und die Gruppenaxiome dies beweisen können.

Aufgabe

Sie schreiben ein Programm oder eine Funktion, um zwei Zöpfe zu nehmen und festzustellen, ob sie gleich sind oder nicht. Optional können Sie auch eine positive Ganzzahl verwenden, die die Reihenfolge der Gruppe darstellt.

Dies ist eine Frage, daher werden die Antworten in Bytes bewertet, wobei weniger Bytes besser sind.

Ein- und Ausgang

Sie sollten ein Braid als eine geordnete Liste von Generatoren darstellen (oder eine äquivalente Struktur, z. B. einen Vektor). Sie können die Generatoren in jeder vernünftigen Form darstellen (z. B. eine Ganzzahl, ein Zweifach-Tupel einer positiven Ganzzahl und ein Boolescher Wert).

Gleichauf mit Standard - Regeln Sie die Ausgabe einer von zwei unterschiedlichen Werten sollten, akzeptieren eine eines ablehnen.

Testfälle

[],       []              -> 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: Beachten Sie, dass, während B n alle Eigenschaften einer Gruppe erfüllt, die Operation für unsere Geflechtgruppe nicht kommutativ ist und daher unsere Gruppe nicht abelisch ist.

2: Wenn Sie dies selbst überprüfen möchten, empfehle ich, σ 1 - auf beide Seiten anzuwenden. Wenn Sie die beiden auf Papier zeichnen oder sie mit tatsächlichen Zeichenfolgen modellieren, sollte sich herausstellen, warum dies der Fall ist.


Ich bin nicht vertraut mit der Theorie des Geflechts, daher bin ich VTCing als völliger Kauderwelsch (nur ein Scherz)
Caird Coinheringaahing

2
Können wir bitte einige Testfälle haben?
HyperNeutrino

@HyperNeutrino Sorry, vergessen, sie hinzuzufügen. Jetzt hinzugefügt. Fühlen Sie sich frei, mehr vorzuschlagen.
Post Rock Garf Hunter

@ WheatWizard Testfall Vorschlag:[],[]
Pavel

Vorgeschlagener [1, 4, -4, 3, 2, 1], [3, 2, 1, 2] => TRUE
Testfall

Antworten:


11

Haskell , 190 Bytes

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

Probieren Sie es online!

Wie es funktioniert

Sei F n die freie Gruppe auf n Generatoren x 1 ,…, x n . Eines der ersten Ergebnisse in Geflechts Theorie (Emil Artin, Theorie der Zöpfe , 1925) ist , dass wir eine injektive haben Homomorphismus f : B nAut ( F n ) , wo die Aktion f σ i von σ i definiert ist durch

f σ i ( x i ) = x i x i + 1 x i -1 ,
f σ i ( x i + 1 ) = x i ,
f σ i ( x j ) = x j für j ∉ { i , i + 1}.

Die Inverse f σ i −1 ist gegeben durch

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 für j ∉ { i , i + 1}

und natürlich ist die Zusammensetzung gegeben durch f ab = f af b .

Um zu testen, ob a = bB n ist , reicht es aus, zu testen, dass f a ( x i ) = f b ( x i ) für alle i = 1,…, n ist . Dies ist ein viel einfacheres Problem in F n , wo wir nur wissen müssen, wie man x i mit x i −1 annulliert .

Im Code:

  • i!jberechnet f σ i ( x j ) (wobei entweder ioder jnegativ sein kann, was eine Inverse darstellt),
  • foldr(%)[] führt Reduktion in der freien Gruppe durch,
  • i&aberechnet f a ( x i ),
  • a?nberechnet [ f a ( x 1 ), ..., f ein ( x n )],
  • und (a#b)nist die Gleichheitsprüfung für a = b in B n .

4

Python 2 , 270 263 260 250 249 241 Bytes

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

Probieren Sie es online!

Implementierung der 'Subword Reversing'-Methode zur Lösung des Flechtisotopie-Problems: a = b iff ab ^ -1 = die Identität.

Algorithmus entnommen aus: Effiziente Lösungen für das Geflechtisotopieproblem, Patrick Dehornoy ; er beschreibt einige andere Algorithmen, die von Interesse sein könnten ...

Dieser Algorithmus bewegt sich in der Liste von links nach rechts und sucht nach einer negativen Zahl, gefolgt von einer positiven Zahl. dh ein Unterwort der Form x i -1 x j mit i, j> 0.

Es werden die folgenden Äquivalenzen verwendet:

x i- 1 x j = x j x i x j- 1 x i- 1, wenn i = j + 1 oder j = i + 1

x i -1 x j = Identität (leere Liste), wenn i == j

x i -1 x j = x j x i -1 ansonsten.

Bei wiederholter Anwendung erhalten wir eine Liste der Form w1 + w2, in der jedes Element von w1positiv und jedes Element von w2negativ ist. (Dies ist die Aktion der Funktion g).

Wir wenden dann gein zweites Mal auf die Liste an w2 + w1; Die resultierende Liste sollte leer sein, wenn die ursprüngliche Liste der Identität entspricht.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.