이 머리띠는 같습니까?


13

Braid-Theory에 익숙하지 않다면 먼저 이것을 읽는 것이 좋습니다 . 이 질문은 당신이 최소한 개념에 익숙하다고 가정하고 당신이 그룹 이론에 익숙하다고 가정합니다.

우리가 정의 할 σ N을 상기 한 편조 될 N 오버 상부 교차 행 번째 가닥 (하나의 색인) N + 1 번째 가닥 및 σ N - 의 역이 될 σ N 즉, 인 ( N + 1 번째 가닥은 n 번째 가닥을 가로 지른다 ).

이어서 브레이드 그룹 B n1 , σ 2 , σ 3 ,에 의해 생성된다 . . . , σ n-1 > . 따라서 브레이드의 모든 B의 N은 σ-띠의 곱으로 쓸 수있다. 1


그룹에서 두 개의 브레이드가 같은지 확인하는 것은 간단한 작업이 아닙니다. σ 1 σ 3 = σ 3 σ 1 이라는 것은 매우 명백 할 수 있지만, 예를 들어 σ 2 σ 1 σ 2 = σ 1 σ 2 σ 1 이라는 것은 조금 덜 분명합니다 . 2

그래서 문제는 "두 개의 브레이드가 같은지 어떻게 알 수 있습니까?"입니다. 위의 두 가지 예는 각각 약간을 나타냅니다. 일반적으로 Artin의 관계라고하는 다음 관계는 사실입니다.

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

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

이 두 관계를 그룹 공리와 함께 사용하여 동일한 브레이드가 동일하다는 것을 증명할 수 있습니다. 따라서 이러한 관계의 반복적 인 적용과 그룹 공리가이를 입증 할 수 있다면 두 개의 브레이드는 동일하다.

직무

두 개의 브레이드를 사용하고 동일한 지 여부를 결정하는 프로그램 또는 함수를 작성합니다. 선택적으로 그룹의 순서를 나타내는 양의 정수를 사용할 수도 있습니다.

이것은 질문이므로 바이트 수가 적을수록 답이 바이트로 표시됩니다.

입력과 출력

정렬 된 생성기 목록 (또는 벡터와 같은 동등한 구조)으로 Braid를 나타내야합니다. 적절한 형식으로 생성기를 나타낼 수 있습니다 (예 : 정수, 양의 정수로 된 두 개의 튜플 및 부울).

표준 결정 규칙 과 동일하게 거부를 수락하는 두 가지 고유 한 값 중 하나를 출력해야합니다.

테스트 사례

[],       []              -> 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 주 동안 그 B N 만족 그룹 우리 꼬임 군의 조작의 속성은 없다 가환, 따라서 우리 그룹 아벨 아니다.

2 : 당신은 내가 적용하는 것이 좋습니다 직접이를 확인하려는 경우 σ 1 - 당신은 종이에있는 두 개의 출력을 그릴 경우, 양쪽 모두에, 또는 실제 문자열을 모델링이 경우 이유가 명백해질 것이다.


나는 브레이드 이론에 익숙하지 않기 때문에 VTCing을 완전히 횡설수설하는 것 (그냥 농담)
caird coinheringaahing

2
테스트 케이스 좀 주 시겠어요?
HyperNeutrino

@HyperNeutrino 추가하는 것을 잊었습니다. 지금 추가되었습니다. 더 제안 해 주시기 바랍니다.
Ad Hoc Garf Hunter 1

@WheatWizard 테스트 사례 제안 :[],[]
Pavel

제안 된 테스트 사례 :[1, 4, -4, 3, 2, 1], [3, 2, 1, 2] => TRUE
HyperNeutrino

답변:


11

하스켈 , 190 바이트

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

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

작동 원리

하자 F를 N없는 그룹n 개의 발전기 X 1 , ..., X n은 . 브레이드 이론의 첫 번째 결과 (에밀 아르 틴의 일 Zöpfe 데르 Theorie 1925) 우리가 단사 가지고있다 동형의 F : B NAUT ( F N ) 동작 F σ 내가 σ의 에 의해 정의된다

F σ I ( X I ) = X X I + 1 X I -1 ,
F σ I ( X I + 1 ) = X I ,
F σ I ( X J ) = X JJ ∉ { I , I + 1}.

역의 f σ i -1 은 다음과 같이 주어진다.

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 JJ ∉ { , 나는 1 +}

물론 조성은 f ab = f af b 로 주어진다 .

a = bB n 인지 여부를 검정하려면 모든 i = 1,…, n에 대해 f a ( x i ) = f b ( x i ) 를 테스트하면 충분합니다 . 이것은 훨씬 간단에서 문제가 F N 우리는 취소하는 방법을 알아야, x를 내가 함께 X 내가 -1 .

코드에서 :

  • i!jf σ i ( x j )를 계산합니다 (여기서 i또는 j음수 일 수 있음).
  • foldr(%)[] 자유 그룹에서 축소를 수행하고
  • i&af a ( x i )를 계산 하고
  • a?n[ f a ( x 1 ),…, f a ( x n )]을 계산합니다.
  • (a#b)n위한 동등 검사이다 = B 에서 B N은 .

4

파이썬 (2) , 270 (263) 260 250 249 241 바이트

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

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

브레이드 동위 원소 문제를 해결하는 '서브 워드 반전'방법의 구현 : a = b iff ab ^ -1 = 동일성.

알고리즘 : 브레이드 동위 원소 문제에 대한 효율적인 솔루션, Patrick Dehornoy ; 그는 관심이있을 수있는 몇 가지 다른 알고리즘을 설명합니다 ...

이 알고리즘은 목록에서 왼쪽에서 오른쪽으로 행진하고 음수와 양수를 차례로 검색하여 작동합니다. 즉, i, j> 0 인 x i -1 x j 형식의 하위 단어 .

다음과 같은 내용을 사용합니다.

i = j + 1 또는 j = i + 1 인 경우 x i -1 x j = x j x i x j -1 x i -1

i == j 인 경우 x i -1 x j = 동일성 (빈 목록)

그렇지 않으면 x i -1 x j = x j x i -1 입니다.

반복되는 적용으로, 우리 는 w1 + w2모든 요소 w1가 양수이고 모든 요소 w2가 음수 인 형식의 목록으로 끝납니다 . (이것은 함수의 동작입니다 g).

그런 다음 g목록에 두 번 적용 합니다 w2 + w1. 원래 목록이 ID와 같으면 결과 목록이 비어 있어야합니다.

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