Se non hai familiarità con la teoria delle trecce, ti consiglio di leggere prima questo . Questa domanda presuppone che tu abbia almeno familiarità con i concetti a portata di mano e presuppone che tu abbia familiarità con la teoria dei gruppi
Definiamo σ n per essere la treccia in cui il n ° filamento (One indicizzato) dalla parte superiore attraversa il n + 1 esimo filo, e σ n - di essere l'inverso di σ n (Questa è la n + 1 ° filo attraversa il n ° filamento).
Il gruppo treccia B n viene quindi generato da <σ 1 , σ 2 , σ 3 ,. . . , σ n-1 > . Pertanto ogni treccia su B n può essere scritta come il prodotto delle trecce σ. 1
Determinare se due trecce su un gruppo sono uguali non è un compito semplice. Può essere abbastanza ovvio che σ 1 σ 3 = σ 3 σ 1 , ma è un po 'meno ovvio che ad esempio σ 2 σ 1 σ 2 = σ 1 σ 2 σ 1 . 2
Quindi la domanda è "Come possiamo determinare se due trecce sono uguali?". Bene, i due esempi sopra ciascuno rappresentano un po 'di questo. In generale, sono vere le seguenti relazioni, chiamate relazioni di Artin:
σ i σ j = σ j σ i ; i - j> 1
σ i σ i + 1 σ i = σ i + 1 σ i σ i + 1
Possiamo usare queste due relazioni in congiunzione con gli assiomi di gruppo per dimostrare che tutte le trecce uguali sono uguali. Quindi due trecce sono uguali se la ripetuta applicazione di queste relazioni e gli assiomi di gruppo possono dimostrarlo.
Compito
Scriverai un programma o una funzione per prendere due trecce e determinare se sono uguali o meno. Puoi anche prendere un numero intero positivo che rappresenta l'ordine del gruppo.
Questa è una domanda di code-golf, quindi le risposte verranno classificate in byte, con meno byte migliori.
Ingresso e uscita
Dovresti rappresentare una treccia come un elenco ordinato di generatori (o qualsiasi struttura equivalente, ad es. Vettore). Puoi rappresentare i generatori in qualsiasi forma ragionevole (ad esempio un numero intero, una due tupla di un numero intero positivo e un valore booleano).
Alla pari con le regole standard del problema di decisione dovresti generare uno di due valori distinti, e accetta un rifiuto.
Casi test
[], [] -> 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: Nota che mentre B n soddisfa tutte le proprietà di un gruppo l'operazione sul nostro gruppo a treccia non è commutativa, e quindi il nostro gruppo non è abeliano.
2: Se desideri verificarlo da solo, ti suggerisco di applicare σ 1 - su entrambi i lati, se disegni i due su carta o li modelli con stringhe effettive, dovrebbe essere chiaro perché questo è il caso.
[],[]
[1, 4, -4, 3, 2, 1], [3, 2, 1, 2] => TRUE