これらの三つ編みは等しいですか?


13

組紐理論に慣れていない場合はまずこれを読むことをお勧めします。この質問は、少なくとも手元の概念に精通していること、およびグループ理論に精通していることを前提としています。

私たちは定義できσ nはここで編組あるとN番目のオーバートップ交雑からストランド(インデックス付きつ)+ 1からn番目の鎖、及びσ N -の逆であるとσ Nすなわち(N + 1番目ストランドはn番目のストランドと交差します)。

編組グループB N次いでによって生成された1、σ 2、σ 3、。。。、σn -1 >。したがって、B nのすべてのブレードは、σ ブレードの積として書くことができます。1


グループの2つのブレードが等しいかどうかを判断するのは簡単な作業ではありません。そのかなり明白であってもよいσ 1 σ 33 σ 1は、それが少し明らかである例えばσ 2 σ 1 σ 21 σ 2 σ 12

したがって、質問は「2つのブレードが同じであるかどうかをどのように判断できますか?」です。さて、上記の2つの例はそれぞれこれを少し表しています。一般に、Artinの関係と呼ばれる以下の関係は真です。

  • σ I σ Jjを σ I ; i-j> 1

  • σ I σ I + 1 σ II + 1 σ I σ I + 1

これらの2つの関係をグループ公理と組み合わせて使用​​して、等しい三つ編みが等しいことを証明できます。したがって、これらの関係とグループ公理が繰り返し適用されることを示すことができれば、2つの三つ編みは等しくなります。

仕事

2つの三つ編みを取り、それらが等しいかどうかを判断するプログラムまたは関数を作成します。オプションで、グループの順序を表す正の整数を取ることもできます。

これは質問なので、回答はバイト単位でスコア付けされ、バイト数は少ない方が良いでしょう。

入出力

Braidは、ジェネレーターの順序付きリスト(またはベクターなどの同等の構造)として表す必要があります。ジェネレータは、任意の合理的な形式(整数、正の整数の2つのタプル、およびブール)で表すことができます。

標準のルールと、2つの異なる値のいずれかを出力する必要があります。拒否を受け入れます。

テストケース

[],       []              -> 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 -あなたが紙の上の2つのアウトを描く場合は、両側に、または実際の文字列でそれらをモデル化し、このような場合は、なぜそれが明らかになるはずです。


従って私は、私は全くちんぷんかんぷん(冗談)としてVTCing午前、編組理論に精通していないよ
coinheringaahing caird

2
いくつかのテストケースをお願いできますか?
ハイパーニュートリノ

@HyperNeutrino申し訳ありませんがそれらを追加するのを忘れました。今追加しました。もっと提案してください。
ポストロックガーフハンター

@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は。編組理論(エイミル・アーティン、最初の結果の一ZöpfeデアTheorie、1925)、我々は単射有することである準同型 FB NAUT(F Nアクション F σ I σのiはによって定義されます

F σ IX I)= X I、X I + 1 X I -1
F σ IX I + 1)= X 、I
F σ IX J)= X jのためのJ ∉{ II + 1}。

F σ Iは -1で与えられます

F σ I -1X I)= X I + 1
F σ I -1X I + 1)= X I + 1 -1 X I、X I + 1
F σ I -1X J)= X jのためのJ ∉{ iはiは 1 +}

もちろん、組成物は、次式で与えられる。fはABは = fはF B

テストするかどうか= BB nは、それが試験に十分でfはX I)= F BをX I全てについて)iが 1、...、= N。これはF nのはるかに単純な問題で、x ix i -1でキャンセルする方法を知る必要があるだけです。

コード内:

  • i!j計算するF σ IXのJ)(ここで、いずれかiまたはj逆を表す、負であってもよいです)、
  • foldr(%)[] フリーグループの削減を実行し、
  • i&af ax i)を計算し、
  • a?n計算[ f ax 1)、…、f ax n)]、
  • そして、(a#b)nの等価試験である= BB N

4

パイソン2270の 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 ; 彼は興味深いかもしれないいくつかの他のアルゴリズムについて説明します...

このアルゴリズムは、リスト内で左から右に行進し、負の数とそれに続く正の数を検索することにより機能します。つまり、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 = ID(空のリスト)i == jの場合

x i -1 x j = x j x i -1それ以外の場合。

繰り返し適用すると、のw1 + w2すべての要素w1が正で、すべての要素w2が負の形式のリストになります。(これは関数のアクションですg)。

次にg、リストに2回適用しますw2 + w1。元のリストがIDと同等である場合、結果のリストは空になります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.