Là những bím tóc bằng nhau?


13

Nếu bạn không quen thuộc với Braid-Theory, tôi khuyên bạn nên đọc cái này trước. Câu hỏi này giả định rằng bạn ít nhất quen thuộc với các khái niệm trong tay và cho rằng bạn đã quen thuộc với lý thuyết nhóm

Chúng ta hãy xác định σ n là braid trong đó n th sợi (Một lập chỉ mục) từ thánh giá đầu trong n + 1 thứ sợi, và σ n - là nghịch đảo của σ n (Đó là n + 1 ngày sợi ngang qua sợi thứ n ).

Nhóm bện B n sau đó được tạo bởi 1 , 2 , 3 ,. . . , σ n-1 > . Do đó, mọi bím tóc trên B n có thể được viết là sản phẩm của-bím tóc. 1


Xác định xem hai bím tóc trên một nhóm bằng nhau không phải là một nhiệm vụ đơn giản. Nó có thể là khá rõ ràng rằng σ 1 σ 3 = σ 3 σ 1 , nhưng nó là một chút ít rõ ràng rằng ví dụ σ 2 σ 1 σ 2 = σ 1 σ 2 σ 1 . 2

Vì vậy, câu hỏi là "Làm thế nào chúng ta có thể xác định nếu hai bím tóc giống nhau?". Vâng, hai ví dụ trên mỗi đại diện cho một chút về điều này. Nói chung, các mối quan hệ sau đây, được gọi là quan hệ của Artin, là đúng:

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

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

Chúng ta có thể sử dụng hai quan hệ này kết hợp với các tiên đề của nhóm để chứng minh rằng bất kỳ bím tóc nào đều bằng nhau. Do đó, hai bím tóc bằng nhau nếu ứng dụng lặp đi lặp lại của các mối quan hệ này và các tiên đề nhóm có thể chứng minh như vậy.

Bài tập

Bạn sẽ viết một chương trình hoặc chức năng để lấy hai bím tóc và xác định xem chúng có bằng nhau hay không. Bạn cũng có thể tùy ý lấy một số nguyên dương biểu thị thứ tự của nhóm.

Đây là một câu hỏi vì vậy câu trả lời sẽ được tính bằng byte, với ít byte hơn sẽ tốt hơn.

Đầu vào và đầu ra

Bạn nên biểu diễn một Braid như một danh sách các trình tạo, theo thứ tự, hoặc bất kỳ cấu trúc tương đương nào, ví dụ như vectơ). Bạn có thể đại diện cho các trình tạo ở bất kỳ dạng hợp lý nào (ví dụ: một số nguyên, hai tuple của một số nguyên dương và một boolean).

Ngang bằng với các quy tắc tiêu chuẩn bạn nên xuất một trong hai giá trị riêng biệt, chấp nhận từ chối.

Các trường hợp thử nghiệm

[],       []              -> 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: Lưu ý rằng mặc dù B n thỏa mãn tất cả các thuộc tính của một nhóm, hoạt động trên nhóm bện của chúng tôi không giao hoán, và do đó nhóm của chúng tôi không phải là abelian.

2: Nếu bạn muốn tự mình xác minh điều này, tôi khuyên bạn nên áp dụng σ 1 - cho cả hai bên, Nếu bạn vẽ hai cái ra giấy, hoặc mô hình hóa chúng bằng các chuỗi thực tế thì rõ ràng tại sao lại như vậy.


Tôi không quen thuộc với lý thuyết bím tóc, vì vậy tôi là VTCing như một người vô nghĩa (chỉ đùa thôi)
caird coinheringaahing

2
Chúng tôi có thể có một số trường hợp thử nghiệm xin vui lòng?
HyperNeutrino

@HyperNeutrino Xin lỗi đã quên thêm chúng. Đã thêm ngay bây giờ. Hãy đề nghị thêm.
Đăng Rock Garf Hunter

Gợi ý trường hợp thử nghiệm @WheatWizard:[],[]
Pavel

Trường hợp thử nghiệm được đề xuất:[1, 4, -4, 3, 2, 1], [3, 2, 1, 2] => TRUE
HyperNeutrino

Câu trả lời:


11

Haskell , 190 byte

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

Hãy thử trực tuyến!

Làm thế nào nó hoạt động

Đặt F nnhóm miễn phí trên n máy phát x 1 , tầm, x n . Một trong những kết quả đầu tiên trong lý thuyết bện (Emil Artin, Theorie der Zöpfe , 1925) là chúng ta có một phép đồng hình hóa tiêm chích f : B nAut ( F n ) trong đó hành động f σ i của σ i được xác định bởi

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 với j ∉ { i , i + 1}.

Nghịch đảo f σ i 1 được cho bởi

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

và tất nhiên thành phần được cho bởi f ab = f af b .

Để kiểm tra xem một = bB n , nó cũng đủ để thử nghiệm mà e một ( x i ) = f b ( x i ) cho tất cả i = 1, ..., n . Đây là một vấn đề đơn giản hơn nhiều trong F n , trong đó chúng ta chỉ cần biết cách hủy x i với x i −1 .

Trong mã:

  • i!jtính f σ i ( x j ) (trong đó ihoặc jcó thể âm, đại diện cho nghịch đảo),
  • foldr(%)[] thực hiện giảm trong nhóm miễn phí,
  • i&atính f a ( x i ),
  • a?ntính [ f a ( x 1 ), Nhận, f a ( x n )],
  • (a#b)nlà phép thử đẳng thức cho a = b trong B n .

4

Python 2 , 270 263 260 250 249 241 byte

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

Hãy thử trực tuyến!

Thực hiện phương pháp 'đảo ngược từ phụ' để giải bài toán đồng vị bện: a = b iff ab ^ -1 = danh tính.

Thuật toán được lấy từ: Giải pháp hiệu quả cho vấn đề đồng vị bện, Patrick Dehornoy ; ông mô tả một số thuật toán khác có thể được quan tâm ...

Thuật toán này hoạt động bằng cách di chuyển từ trái sang phải trong danh sách, tìm kiếm số âm theo sau là số dương; tức là một từ phụ có dạng x i -1 x j với i, j> 0.

Nó sử dụng các tương đương sau:

x i -1 x j = x j x i x j -1 x i -1 nếu i = j + 1 hoặc j = i + 1

x i -1 x j = danh tính (danh sách trống) nếu i == j

x i -1 x j = x j x i -1 nếu không.

Bằng cách áp dụng lặp đi lặp lại, chúng tôi kết thúc với một danh sách biểu mẫu w1 + w2, trong đó mọi yếu tố w1đều dương và mọi yếu tố w2đều âm tính. (Đây là hành động của hàm g).

Sau đó chúng tôi áp dụng glần thứ hai vào danh sách w2 + w1; danh sách kết quả phải trống nếu danh sách ban đầu tương đương với danh tính.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.