Чи рівні ці коси?


13

Якщо ви не знайомі з теорією брейд, я рекомендую спочатку прочитати це . Це питання передбачає, що ви принаймні знайомі з поняттями, які ви знайдете, і передбачаєте, що ви добре знайомі з теорією груп

Визначимо σ n як тасьму, в якій n- я нитка (Один з індексованих) зверху перетинається через n + 1- ю нитку, а σ n - обернена від σ n (тобто n + 1- й пасма перетинає n- ту пасму).

Група кіс У п потім генерується <сг 1 , σ 2 , σ 3 ,. . . , σ n-1 > . Таким чином, кожна коса на B n може бути записана як добуток σ-коси. 1


Визначити, чи однакові дві коси в групі, не є простим завданням. Може бути досить очевидним, що σ 1 σ 3 = σ 3 σ 1 , але трохи менш очевидно, що, наприклад, σ 2 σ 1 σ 2 = σ 1 σ 2 σ 1 . 2

Тож питання "Як ми можемо визначити, чи однакові дві коси?". Добре два приклади, наведені вище, представляють трохи цього. Загалом вірні такі відносини, які називаються відносинами Артіна:

  • σ 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 - до обох сторін. Якщо ви намалюєте ці два на папері або змоделюєте їх фактичними рядками, повинно стати очевидним, чому це так.


Я не знайомий з теорією коси, тому я вважаю, що я абсолютно негідний (просто жартую)
caird coinheringaahing

2
Чи можемо ми мати якісь тестові випадки?
HyperNeutrino

@HyperNeutrino Вибачте, забув додати їх. Додано зараз. Не соромтеся запропонувати більше.
Ad Hoc Hunter Hunter

Пропозиція тестового випадку @WheatWizard:[],[]
Павло

Пропонований тестовий випадок:[1, 4, -4, 3, 2, 1], [3, 2, 1, 2] => TRUE
HyperNeutrino

Відповіді:


11

Haskell , 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 . Одним з перших результатів теорії коси (Еміль Артін, Теорія дер Зепфе , 1925) є те, що у нас є ін'єктивний гомоморфізм f : B nAut ( F n ), де дія f σ i of σ 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 для j ∉ { 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 j для j ∉ { i , i + 1}

і звичайно склад задається f ab = f af b .

Щоб перевірити, чи a = bB n , досить перевірити, що f a ( x i ) = f b ( x i ) для всіх i = 1,…, n . Це набагато простіша проблема у F n , де нам потрібно лише знати, як відмінити x i за допомогою x i −1 .

У коді:

  • i!jобчислює f σ i ( x j ) (де iабо jможе бути негативним, що представляє собою обернену),
  • foldr(%)[] виконує скорочення вільної групи,
  • i&aобчислює f a ( x i ),
  • a?nобчислює [ f a ( x 1 ),…, f a ( x n )],
  • і (a#b)nє тестом рівності для a = b в B n .

4

Python 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 = тотожність.

Алгоритм, взятий з: Ефективні рішення проблеми ізотопії коси, Патрік Дехорний ; він описує кілька інших алгоритмів, які можуть представляти інтерес ...

Цей алгоритм працює, рухаючись ліворуч праворуч у списку, шукаючи від’ємне число, а потім додатне число; тобто під слово форми x i -1 x j з i, j> 0.

Він використовує такі еквіваленти:

x i -1 x j = x j x i x j -1 x i -1, якщо i = j + 1 або j = i + 1

x i -1 x j = особистість (порожній список), якщо i == j

x i -1 x j = x j x i -1 в іншому випадку.

При повторному застосуванні ми закінчуємо список форми w1 + w2, де кожен елемент w1позитивного, а кожен елемент w2- негативний. (Це дія функції g).

Потім ми gвдруге застосовуємо до списку w2 + w1; отриманий список повинен бути порожнім, якщо вихідний список був еквівалентний ідентичності.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.