タスク
定義
ポイント{1,2,3,4,5}とそれらのすべての順列を考慮してください。これらの5つのポイントの可能な順列の総数は、簡単なトリックで確認できます。5つのスロットをこれらのポイントで埋めるイメージ、最初のスロットは5つの可能な数字、2番目のスロットは4つ(最初のスロットを埋めるために使用されているため) 3番目の3など。したがって、順列の総数は5 * 4 * 3 * 2 * 1です。これは5になります。順列または120順列。これは対称群S5と考えることができ、対称群Snにはn! or (n*n-1*n-2...*1)順列があります。
「偶数」の順列とは、偶数の偶数の長さのサイクルがある順列です。(1 2 3)(4 5)順列1->2->3->1などの巡回記法で記述すると、最もわかりやすく、4->5->43つの長さのサイクル(1 2 3)と2つの長さのサイクルが1つずつあります(4 5)。順列を奇数または偶数として分類する場合、奇数長のサイクルを無視し、この順列[ (1 2 3)(4 5)]は奇数であると言います。例でも:
(1)(2 3)(4 5)= 2つの2長さサイクル| EVEN |(1 2 3 4 5)=長さのサイクルはありません| EVEN | *長さのサイクルが存在しない場合、順列は偶数であることに注意してください。
奇妙な例:
(1 2)(3 4 5)= 1つの2長さサイクル| ODD |(1)(2 3 4 5)= 1つの4長さサイクル| ODD |
対称グループの順列のちょうど半分が偶数であるため、偶数グループを交互グループNと呼ぶことができるため、S5 = 120 A5 = 60の順列となります。
表記
順列は、少なくともこれのために、各サイクルが異なる括弧内にあり、各サイクルが昇順で行く循環表記で書かれるべきです。例えば(1 2 3 4 5)ない(3 4 5 1 2)です。また、次のような単一の数値を持つサイクルの場合:(1)(2 3 4)(5)単一/固定小数点は、意味を除外できます(1)(2 3 4)(5) = (2 3 4)。ただし、アイデンティティー{すべてのポイントが修正さ(1)(2)(3)(4)(5)れるポイント}は、()それを表すためだけに記述する必要があります。
チャレンジ
可能な限り少ないコードで、入力として任意の正の整数{1,2,3,4 ...}を取り、交互グループAnのすべての順列を表示してください(nは入力/すべての偶数) Snの順列。例えば:
Input = 3
()
(1 2 3)
(1 3 2)
そして
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)
また、例と同様に、1つの長さのすべてのサイクルを省略し、IDについては何も出力しない、(){ブラケットだけでなく、さまざまな順列を示すために使用してidいるもの}または許容できるものを出力します。
追加の読書
あなたはここでより多くの情報を見つけることができます:
幸運を
これはcodegolfなので、Alternating Group Anの置換を最短バイトで印刷できる人が勝ちです。
(2 3 1 4)を昇順にするにはどうすればよいですか?一番小さい要素を前に置くだけですか?
(2 3 1 4)はない2->3->1->4->2、それは書くことができ(1 4 2 3)、最初にその最小の要素で
[[1, 2], [3, 4]]代わりに出力することはでき(1 2)(3 4)ますか?