DIE AUFGABE
DEFINITIONEN
Betrachten Sie die Punkte {1,2,3,4,5} und alle ihre Permutationen. Wir können die Gesamtzahl der möglichen Permutationen dieser 5 Punkte durch einen einfachen Trick ermitteln: Stellen Sie sich vor, Sie füllen 5 Slots mit diesen Punkten, der erste Slot hat 5 mögliche Nummern, der zweite 4 (wie einer verwendet wurde, um den ersten Slot zu füllen). die dritte 3 und so weiter. Somit beträgt die Gesamtzahl der Permutationen 5 * 4 * 3 * 2 * 1; das wäre 5! Permutationen oder 120 Permutationen. Wir können uns dies als die symmetrische Gruppe S5 vorstellen, und dann hätte die symmetrische Gruppe Sn n! or (n*n-1*n-2...*1)
Permutationen.
Eine "gerade" Permutation ist eine, bei der es eine gerade Anzahl von Zyklen mit gerader Länge gibt. Es ist am einfachsten zu verstehen, wenn es in zyklischer Notation geschrieben ist, zum Beispiel (1 2 3)(4 5)
permutiert 1->2->3->1
und 4->5->4
einen 3-Längen-Zyklus (1 2 3)
und einen 2-Längen-Zyklus hat (4 5)
. Wenn wir eine Permutation als ungerade oder gerade klassifizieren, ignorieren wir ungerade Längenzyklen und sagen, dass diese Permutation [ (1 2 3)(4 5)
] ungerade ist, da sie eine ungerade Anzahl {1} von geraden Längenzyklen hat. Sogar Beispiele:
(1)(2 3)(4 5)
= zwei 2 Längenzyklen | AUCH |(1 2 3 4 5)
= keine geraden Längenzyklen | AUCH | * Beachten Sie, dass die Permutation gerade ist, wenn keine Zyklen mit gerader Länge vorhanden sind.
Seltsame Beispiele:
(1 2)(3 4 5)
= ein Zyklus mit 2 Längen | ODD |(1)(2 3 4 5)
= ein Zyklus mit 4 Längen | ODD |
Da genau die Hälfte der Permutationen in einer symmetrischen Gruppe gerade sind, können wir die gerade Gruppe als alternierende Gruppe N bezeichnen, also als S5 = 120 A5 = 60 Permutationen.
NOTATION
Zumindest dafür sollten Permutationen in zyklischer Notation geschrieben werden, wobei jeder Zyklus in einer anderen Klammer steht und jeder Zyklus in aufsteigender Reihenfolge abläuft. Zum Beispiel (1 2 3 4 5)
nicht (3 4 5 1 2)
. Und für Zyklen mit einer einzelnen Zahl, wie zum Beispiel: (1)(2 3 4)(5)
Die einzelnen / festen Punkte können ausgeschlossen werden (1)(2 3 4)(5) = (2 3 4)
. Aber die Identität (der Punkt, an dem alle Punkte festgelegt sind (1)(2)(3)(4)(5)
) sollte nur geschrieben werden ()
, um sie darzustellen.
DIE HERAUSFORDERUNG
Ich möchte, dass Sie in so wenig Code wie möglich eine positive ganze Zahl als Eingabe {1,2,3,4 ...} nehmen und alle Permutationen der alternierenden Gruppe An anzeigen, wobei n die Eingabe / alle Geraden ist Permutationen von Sn. Beispielsweise:
Input = 3
()
(1 2 3)
(1 3 2)
und
Input = 4
()
(1 2)(3 4)
(1 3)(2 4)
(1 4)(2 3)
(1 2 3)
(1 3 2)
(1 2 4)
(1 4 2)
(1 3 4)
(1 4 3)
(2 3 4)
(2 4 3)
Und wie in den Beispielen möchte ich, dass alle Zyklen einer Länge entfernt werden, und was die Identität betrifft: Ausgaben von nichts,
()
{nicht nur Klammern, sondern mit allem, was Sie verwenden, um unterschiedliche Permutationen anzuzeigen} oder id
akzeptabel sind.
ZUSÄTZLICHE LESUNG
Weitere Informationen finden Sie hier:
VIEL GLÜCK
Und da dies ein Codegolf ist, gewinnt jeder, der die Permutationen der alternierenden Gruppe An in kürzesten Bytes drucken kann.
(2 3 1 4)
in aufsteigender Reihenfolge? Meinen Sie damit, wir sollten nur das kleinste Element in den Vordergrund stellen?
(2 3 1 4)
nicht 2->3->1->4->2
kann geschrieben werden , (1 4 2 3)
zuerst mit seinem kleinsten Elemente
[[1, 2], [3, 4]]
statt ausgegeben werden(1 2)(3 4)
?