順列の最初の意味によれば、6つの列のそれぞれは3つの異なるボールの異なる順列である。 数学 では、集合 の順列は 次の 2 つの異なる意味のいずれかになります。
メンバーを連続的 または線形順序 で配置すること、または 順序付けられた集合の線形順序を変更する行為またはプロセス。[ 1 ] 最初の意味の例は、集合{1, 2, 3}の6つの順列(順序)です。組 で書くと、(1, 2, 3)、(1, 3, 2)、(2, 1, 3)、(2, 3, 1)、(3, 1, 2)、(3, 2, 1)となります。文字がすべて異なる単語のアナグラムも順列です。元の単語では文字が既に順序付けられており、アナグラムによって文字の順序が変わります。 有限集合 の順列の研究は、組合せ論 と群論 における重要なテーマです。
順列は数学のほぼすべての分野と、その他多くの科学分野で用いられています。コンピュータサイエンスでは ソートアルゴリズム の解析に、量子物理学 では粒子の状態の記述に、生物学では RNA 配列の記述に用いられています。
n 個の異なるオブジェクトの順列の数はn の 階乗 であり、通常はn !と表記され、これはn 以下のすべての正の整数の積を意味します。
2 番目の意味によれば、集合 S の順列はS からそれ自身への全単射 として定義されます。 [ 2 ] [ 3 ] つまり、それはS からS への関数であり、そのすべての要素が 像 値としてちょうど 1 回出現します。このような関数は、各要素i を対応する で置き換えたS の要素の並べ替えに相当します。たとえば、順列 (3, 1, 2) は、次のように定義される 関数に対応します 。集合のすべての順列のコレクションは、その集合の対称群 と呼ばれるグループ を形成します。群演算は 関数の合成 (1 つの並べ替えを次々に実行) であり、その結果、別の関数 (並べ替え) が生成されます。σ : S → S {\displaystyle \sigma :S\to S} σ ( 私 ) {\displaystyle \sigma (i)} σ {\displaystyle \sigma } σ ( 1 ) = 3 、 σ ( 2 ) = 1 、 σ ( 3 ) = 2. {\displaystyle \sigma (1)=3,\quad \sigma (2)=1,\quad \sigma (3)=2.}
初等組合せ論において、k順列(k -permutations) あるいは部分順列(partial permutations )とは、集合からk 個の異なる要素を順序付けて並べたものである。kが 集合の大きさに等しい場合、これらは前述の意味での順列である。
1974 年にエルネー・ルービック が発明した人気のパズル「ルービック キューブ」 では、パズルの面を 1 回転させるごとに表面の色の順列が生成されます。
歴史 六十四卦 と呼ばれる順列のようなものは、紀元前 1000 年頃にはすでに中国の易経 (ピンイン : 易経) で使用されていました。
ギリシャでは、プルタルコスはカルケドン公 クセノクラテス (紀元前396~314年)がギリシャ語の音節の数を発見したと記している。これは、順列と組み合わせに関する難問を解こうとした、記録に残る最初の試みであったと考えられる。[ 4 ]
アラブの数学者 であり暗号学者でもあった アル=ハリール (717–786)は、『暗号文集』 を著した。この本には、順列と組み合わせが初めて用いられ、母音の有無を問わずあらゆるアラビア 語の単語が列挙されている。[ 5 ]
n 個の物体の順列の数を決定する規則は、西暦1150年頃にインド文化で知られていました。インドの数学者バースカラ2世の『 リラーヴァティ』 には、次のように訳される一節があります。
1から始まり1ずつ増加し、桁数まで続く等差数列の乗算の積は、特定の数字を持つ数のバリエーションとなる。[ 6 ]
1677年、ファビアン・ステッドマンは、 チェンジリンギング における鐘の順列の数を説明する際に階乗について述べた。2つの鐘から始め、「まず、2つは 2通りの方法で変化することが認められなければならない」と述べ、1 2と2 1を例に挙げて説明した。 次に、3つの鐘の場合、「3つから3×2の数字が生成される」と説明し、これもまた例証されている。彼の説明には、「3を捨てれば1.2が残り、2を捨てれば1.3が残り、1を捨てれば2.3が残る」という内容が含まれている。 次に、4つの鐘に移り、「捨てる」という議論を繰り返し、3つの鐘の組み合わせが4通りあることを示した。これは実質的に再帰的なプロセスである。彼は5つの鐘でも「捨てる」という手法を用い、結果として得られる120通りの組み合わせを表にまとめた。 ここで彼は諦め、次のように述べている。
これらの方法の性質は、一つの数の変化がそれより小さな数の変化を全て包含するというものである。…一つの数の変化の完全な音は、それより小さな数の変化の完全な音を一つの全体に統合することによって形成されるように見える。
ステッドマンは順列の考察を広げ、アルファベットの文字の順列の数と20頭の馬小屋の馬の順列の数を考察している。
一見無関係に見える数学の問題が順列を用いて研究された最初の事例は、1770年頃にジョゼフ・ルイ・ラグランジュが 多項式方程式の研究において、方程式の根の順列の性質が方程式を解く可能性と関連していることに気づいたときでした。この研究の流れは最終的に、 エヴァリスト・ガロワ の研究を通じてガロア理論に結実し、ガロア理論 は、根号を用いて(未知数が1つの)多項式方程式を解くことに関して、何が可能で何が不可能かを包括的に記述しました。現代数学にも、問題を理解するために、それに関連する特定の順列の研究が必要となる同様の状況が数多くあります。
n 個の要素の置換としての順列の研究は、コーシー (1815 年の回想録) の著作を通じて、代数構造としての群の概念につながりました。
順列は、第二次世界大戦 中にナチス・ドイツ が使用した暗号装置であるエニグマの解読 において重要な役割を果たしました。特に、順列の重要な性質の一つ、すなわち、2つの順列が同じサイクル型を持つ場合、それらはまさに共役であるという性質は、暗号学者マリアン・レイェフスキ によって1932年から1933年にかけてドイツのエニグマ暗号を解読するために利用されました。[ 12 ] [ 13 ]
意味 数学の教科書では、順列を小文字のギリシャ文字で表記するのが慣例となっている。[ 14 ]
順列は集合S からそれ自身への全単射 (可逆写像、一対一かつ全射関数)として定義できる。 恒等順列は すべての要素に対して定義され、数、[ a ] 、または単一の1サイクル(x)で表すことができる。 [ 15 ] [ 16 ] σ : S ⟶ 〜 S 。 {\displaystyle \sigma :S\ {\stackrel {\sim }{\longrightarrow }}\ S.} σ ( × ) = × {\displaystyle \sigma (x)=x} x ∈ S {\displaystyle x\in S} 1 {\displaystyle 1} id = id S {\displaystyle {\text{id}}={\text{id}}_{S}}
n 個の元を持つ集合のすべての順列の集合は対称群 を形成し、群演算は 関数 の合成 である。したがって、群 内の2 つの順列と に対して、それらの積は で定義される 。合成は通常、ドットなどの記号なしで表記される。一般に、2 つの順列の合成は可換で はない。つまり、通常、順列と は等しくない。 S n {\displaystyle S_{n}} σ {\displaystyle \sigma } τ {\displaystyle \tau } S n {\displaystyle S_{n}} π = σ τ {\displaystyle \pi =\sigma \tau } π ( i ) = σ ( τ ( i ) ) . {\displaystyle \pi (i)=\sigma (\tau (i)).} τ σ {\displaystyle \tau \sigma } σ τ {\displaystyle \sigma \tau }
集合からそれ自身への一対一である順列は、集合の並べ替えを実行する関数であり、 能動順列 または置換と呼ばれます。古い観点では、順列は S のすべての要素の順序付けられた配置またはリストであり、受動順列 と呼ばれます。この定義によれば、§ 1 行表記のすべての順列は受動的です。この意味は 、能動変換と受動変換 などにおける受動的な (つまりエイリアス ) 使用法とは微妙に異なります。 [ 18 ] [ 19 ] では、すべての順列は受動的な解釈が可能であるとされています (1 行表記、2 行表記などに関係なく)。
順列は、集合Sに 作用する 巡回群の軌道 である、 1つ以上の互いに素な閉路 に分解できます。閉路は、 の元に順列を繰り返し適用することで得られます。ここで を仮定します。k 個の元からなる閉路はk 閉 路と呼ばれます。(以下の§ 閉路記法を 参照) σ {\displaystyle \sigma } ⟨ σ ⟩ = { 1 , σ , σ 2 , … } {\displaystyle \langle \sigma \rangle =\{1,\sigma ,\sigma ^{2},\ldots \}} x , σ ( x ) , σ ( σ ( x ) ) , … , σ k − 1 ( x ) {\displaystyle x,\sigma (x),\sigma (\sigma (x)),\ldots ,\sigma ^{k-1}(x)} σ k ( x ) = x {\displaystyle \sigma ^{k}(x)=x}
順列の不動点と は、x がそれ自身に取り込まれる、つまり1 サイクル を形成する順列のことである。不動点のない順列は、乱れと呼ばれる。2 つの要素(単一の 2 サイクル)を交換し、他の要素を固定する順列は、 転置 と呼ばれる。 σ {\displaystyle \sigma } σ ( x ) = x {\displaystyle \sigma (x)=x} ( x ) {\displaystyle (\,x\,)}
表記 順列を簡便に表すために、いくつかの表記法が広く用いられています。順列の性質は、順列化される要素の性質ではなく、その個数のみに依存するため、標準集合がしばしば用いられます。 サイクル表記法 は簡潔で順列の構造を明確に示すため、よく用いられます。この記事では、特に断りのない限り、サイクル表記法を使用します。 { 1 , 2 , … , n } {\displaystyle \{1,2,\ldots ,n\}}
2行表記 コーシー の2行表記法 [ 20 ] [ 21 ] では、1行目にS の元を、2行目にその下の各元の像を列挙する。例えば、 S = {1, 2, 3, 4, 5, 6}の順列は、関数
σ ( 1 ) = 2 , σ ( 2 ) = 6 , σ ( 3 ) = 5 , σ ( 4 ) = 4 , σ ( 5 ) = 3 , σ ( 6 ) = 1 {\displaystyle \sigma (1)=2,\ \ \sigma (2)=6,\ \ \sigma (3)=5,\ \ \sigma (4)=4,\ \ \sigma (5)=3,\ \ \sigma (6)=1}
次のように書くことができる
σ = ( 1 2 3 4 5 6 2 6 5 4 3 1 ) . {\displaystyle \sigma ={\begin{pmatrix}1&2&3&4&5&6\\2&6&5&4&3&1\end{pmatrix}}.} S の要素は最初の行に任意の順序で現れる可能性があるので、この順列は次のようにも書けます。
σ = ( 2 3 4 5 6 1 6 5 4 3 1 2 ) = ( 6 5 4 3 2 1 1 3 4 5 6 2 ) . {\displaystyle \sigma ={\begin{pmatrix}2&3&4&5&6&1\\6&5&4&3&1&2\end{pmatrix}}={\begin{pmatrix}6&5&4&3&2&1\\1&3&4&5&6&2\end{pmatrix}}.}
1行表記 S の要素に「自然な」順序がある場合([ b ] とします)、これを2行表記の最初の行に使用します。 x 1 , x 2 , … , x n {\displaystyle x_{1},x_{2},\ldots ,x_{n}}
σ = ( x 1 x 2 x 3 ⋯ x n σ ( x 1 ) σ ( x 2 ) σ ( x 3 ) ⋯ σ ( x n ) ) . {\displaystyle \sigma ={\begin{pmatrix}x_{1}&x_{2}&x_{3}&\cdots &x_{n}\\\sigma (x_{1})&\sigma (x_{2})&\sigma (x_{3})&\cdots &\sigma (x_{n})\end{pmatrix}}.} この仮定のもとでは、最初の行を省略して、順列を1行表記 で次のように 書くことができる。
σ = σ ( x 1 ) σ ( x 2 ) σ ( x 3 ) ⋯ σ ( x n ) {\displaystyle \sigma =\sigma (x_{1})\;\sigma (x_{2})\;\sigma (x_{3})\;\cdots \;\sigma (x_{n})} 、すなわち、 S の要素を順序付けて並べたものである。[ 22 ] [ 23 ] 1行表記と後述する循環表記を区別するために注意が必要である。一般的な用法としては、1行表記では括弧などの囲み記号を省略し、循環表記では括弧を使用する。1行表記は単語 表現 とも呼ばれる。[ 24 ]
上記の例は次のようになります。
σ = ( 1 2 3 4 5 6 2 6 5 4 3 1 ) = 265431. {\displaystyle \sigma ={\begin{pmatrix}1&2&3&4&5&6\\2&6&5&4&3&1\end{pmatrix}}=265431.}
(エントリの一部に 2 桁以上の数字がある場合のみ、コンマを使用してこれらのエントリを区切るのが一般的です。)
このコンパクトな形式は、初等的な組合せ論 やコンピュータサイエンスにおいてよく用いられます。特に、 辞書式順序 を用いて順列の大きさを 比較する必要があるアプリケーションで有用です。
サイクル表記 サイクル記法は、集合S の要素に順列を繰り返し適用した際の効果を記述する記法であり、軌道はサイクルと呼ばれます。順列はサイクルのリストとして記述されます。異なるサイクルは 互いに素な 要素の集合を含むため、これは「互いに素なサイクルへの分解」と呼ばれます。
順列を循環記法で 書き表すには、次のようにします。σ {\displaystyle \sigma }
開き括弧に続けて任意の要素x を 書きます。 S {\displaystyle S} ( x {\displaystyle (\,x} x の軌道をトレースし、 を連続的に適用したときの値を書き記します。σ {\displaystyle \sigma } ( x , σ ( x ) , σ ( σ ( x ) ) , … {\displaystyle (\,x,\sigma (x),\sigma (\sigma (x)),\ldots } 値がx に戻るまで繰り返し、 x を 繰り返さずに括弧を閉じます。( x σ ( x ) σ ( σ ( x ) ) … ) {\displaystyle (\,x\,\sigma (x)\,\sigma (\sigma (x))\,\ldots \,)} まだ書き込まれていないS の要素y を続けて、上記のプロセスを繰り返します。( x σ ( x ) σ ( σ ( x ) ) … ) ( y … ) {\displaystyle (\,x\,\sigma (x)\,\sigma (\sigma (x))\,\ldots \,)(\,y\,\ldots \,)} S のすべての要素が循環的に書き込まれるまで繰り返します。また、1サイクルは推論できるため省略するのが一般的です。Sのどのサイクルにも現れない任意の要素xについては、暗黙的に と仮定し ます 。[ 25 ] σ ( x ) = x {\displaystyle \sigma (x)=x}
1サイクルを省略するという慣例に従えば、個々のサイクルを、サイクルに含まれないすべての要素を固定する順列(長さが1より大きいサイクルが1つだけ存在する巡回順列 )と解釈することができます。この場合、互いに素なサイクルのリストは、これらの巡回順列の合成と見なすことができます。例えば、1行順列はサイクル表記法で次のように表すことができます。 これは巡回順列の 合成と見なすことができます。 一般に順列は交換できませんが、互いに素なサイクルは交換できます。例えば、次のようになります。 また、各サイクルは異なる開始点から書き直すことができます。例えば、次のように なります。このように、特定の順列の互いに素なサイクルは、さまざまな方法で表すことができます。 σ = 265431 {\displaystyle \sigma =265431} σ = ( 126 ) ( 35 ) ( 4 ) = ( 126 ) ( 35 ) . {\displaystyle \sigma =(126)(35)(4)=(126)(35).} σ = κ 1 κ 2 {\displaystyle \sigma =\kappa _{1}\kappa _{2}} κ 1 = ( 126 ) = ( 126 ) ( 3 ) ( 4 ) ( 5 ) , κ 2 = ( 35 ) = ( 35 ) ( 1 ) ( 2 ) ( 4 ) ( 6 ) . {\displaystyle \kappa _{1}=(126)=(126)(3)(4)(5),\quad \kappa _{2}=(35)=(35)(1)(2)(4)(6).} σ = ( 126 ) ( 35 ) = ( 35 ) ( 126 ) . {\displaystyle \sigma =(126)(35)=(35)(126).} σ = ( 126 ) ( 35 ) = ( 261 ) ( 53 ) . {\displaystyle \sigma =(126)(35)=(261)(53).}
サイクル記法の便利な特徴は、順列の反転は各サイクル内の要素の順序を逆にすることで表現されることです。例えば、 σ − 1 = ( A 2 ( 126 ) ( 35 ) ) − 1 = ( 621 ) ( 53 ) . {\displaystyle \sigma ^{-1}=\left({\vphantom {A^{2}}}(126)(35)\right)^{-1}=(621)(53).}
標準サイクル記法 組み合わせ論的な文脈によっては、サイクル内の要素や(互いに素な)サイクル自体の要素の順序を固定することが有用な場合があります。ミクローシュ・ボナは、 以下の順序付けを標準サイクル記法と呼んでいます。
各サイクルでは最大の 要素が最初にリストされます サイクルは最初の要素の昇順でソートされ、 1サイクルは省略されない。 例えば、は標準循環記法におけるの順列である。[ 26 ] ( 513 ) ( 6 ) ( 827 ) ( 94 ) {\displaystyle (513)(6)(827)(94)} S = { 1 , 2 , … , 9 } {\displaystyle S=\{1,2,\ldots ,9\}}
リチャード・スタンレーは これを順列の「標準表現」と呼び、[ 27 ] マーティン・アイグナーは「標準形式」を使用している。[ 24 ] セルゲイ・キタエフ も「標準形式」という用語を使用しているが、両者の選択を逆にしている。つまり、各サイクルは最小元を最初にリストし、サイクルは最小元の降順で並べられている。[ 28 ]
順列の合成 2つの順列の合成を表す方法は2つあります。最も一般的な表記法では、は任意の要素x を に写す関数です。 引数は関数の右側に記述されるため、 最も右側の順列は最初に引数に適用されます[ 29 ] 。 σ ⋅ τ {\displaystyle \sigma \cdot \tau } σ ( τ ( x ) ) {\displaystyle \sigma (\tau (x))}
順列の乗算に関する別の 規則は、関数の左側に引数を書き、最も左側の順列が最初に作用するようにすることです。[ 30 ] [ 31 ] [ 32 ] この表記法では、順列は指数として書かれることが多く、σが x に作用する場合はxσ と 書きます。その場合、積は で定義されます。この記事では、右端の順列が最初に適用される最初の定義を使用します。 x σ ⋅ τ = ( x σ ) τ {\displaystyle x^{\sigma \cdot \tau }=(x^{\sigma })^{\tau }}
関数合成演算は 群 の公理を満たす。これは結合的 であり、 を意味し、2つ以上の置換の積は通常括弧なしで表記される。合成演算には恒等元 (恒等置換)も存在し、各置換には の逆関数(逆関数 )が存在する。 ( ρ σ ) τ = ρ ( σ τ ) {\displaystyle (\rho \sigma )\tau =\rho (\sigma \tau )} id {\displaystyle {\text{id}}} σ {\displaystyle \sigma } σ − 1 {\displaystyle \sigma ^{-1}} σ − 1 σ = σ σ − 1 = id {\displaystyle \sigma ^{-1}\sigma =\sigma \sigma ^{-1}={\text{id}}}
順列 という用語の他の用法順序付けられた配列としての順列の概念には、特に古い文献において順列 と呼ばれてきたいくつかの一般化が認められています。
nの k 順列古い文献や初等教科書では、n の k 順列(部分順列 、繰り返しのないシーケンス 、変化 、配置と呼ばれることもある)は、 n集合の k 要素サブセットの順序付けられた配置(リスト)を意味します。[ c ] [ 33 ] [ 34 ] このようなk 順列(k 配置)の数は、、、、、、 などの記号で様々に表されます。[ 35 ] 計算式は次のとおりです。 [ 36 ] n {\displaystyle n} P k n {\displaystyle P_{k}^{n}} n P k {\displaystyle _{n}P_{k}} n P k {\displaystyle ^{n}\!P_{k}} P n , k {\displaystyle P_{n,k}} P ( n , k ) {\displaystyle P(n,k)} A n k {\displaystyle A_{n}^{k}} P ( n , k ) = n ⋅ ( n − 1 ) ⋅ ( n − 2 ) ⋯ ( n − k + 1 ) ⏟ k f a c t o r s , {\displaystyle P(n,k)=\underbrace {n\cdot (n-1)\cdot (n-2)\cdots (n-k+1)} _{k\ \mathrm {factors} },}
これはk > nの ときは0 、そうでないときは n ! ( n − k ) ! . {\displaystyle {\frac {n!}{(n-k)!}}.}
積は、 が非負の整数であるという仮定なしに明確に定義され、組合せ論以外でも重要である。これはポッホハマー記号 または階乗降階乗として知られている。 n {\displaystyle n} ( n ) k {\displaystyle (n)_{k}} k {\displaystyle k} n k _ {\displaystyle n^{\underline {k}}} P ( n , k ) = n P k = ( n ) k = n k _ . {\displaystyle P(n,k)={_{n}}P_{k}=(n)_{k}=n^{\underline {k}}.}
この「順列」 という用語の用法は、「組み合わせ」という用語と密接に関連しており、部分集合 を意味します。集合Sの k 組み合わせは、 Sの k 要素部分集合です。つまり、組み合わせの要素は順序付けられていません。S のk 組み合わせをあらゆる方法で順序付けると、 S のk順列が生成されます。したがって、 n 集合のk 組み合わせの数C ( n , k ) は、 nの k 順列の数と次の関係があります。 C ( n , k ) = P ( n , k ) P ( k , k ) = n k _ k ! = n ! ( n − k ) ! k ! . {\displaystyle C(n,k)={\frac {P(n,k)}{P(k,k)}}={\frac {n^{\underline {k}}}{k!}}={\frac {n!}{(n-k)!\,k!}}.}
これらの数値は二項係数 とも呼ばれ、通常は次のように表記されます。 ( n k ) {\displaystyle {\tbinom {n}{k}}} C ( n , k ) = n C k = ( n k ) . {\displaystyle C(n,k)={_{n}}C_{k}={\binom {n}{k}}.}
繰り返しによる順列 集合Sの k 個の要素を順序付けて並べたもので、繰り返しが許されているものはk 組と呼ばれます。これは通常の意味での順列ではありませんが、 繰り返しを含む順列 と呼ばれることもあります。また、アルファベットS上の 単語 や文字列 とも呼ばれます。集合S が n 個の要素を持つ場合、 S 上のk 組の数はn k . {\displaystyle n^{k}.}
多重集合の順列 左側に繰り返しがなく、右側に繰り返しがある順列 M が有限多重集合 である場合、多重集合順列とは 、各要素が M における その重複度とちょうど等しい回数出現する順序付けられた配列である。ある単語のアナグラム で、ある文字が繰り返される例は、多重集合順列の例である。[ d ] M の要素の重複度(ある順序で)が、、…であり、それらの合計(つまり、M のサイズ)がnである場合、 M の多重集合順列の数は多項式係数 で与えられる。[ 37 ] m 1 {\displaystyle m_{1}} m 2 {\displaystyle m_{2}} m l {\displaystyle m_{l}} ( n m 1 , m 2 , … , m l ) = n ! m 1 ! m 2 ! ⋯ m l ! = ( ∑ i = 1 l m i ) ! ∏ i = 1 l m i ! . {\displaystyle {n \choose m_{1},m_{2},\ldots ,m_{l}}={\frac {n!}{m_{1}!\,m_{2}!\,\cdots \,m_{l}!}}={\frac {\left(\sum _{i=1}^{l}{m_{i}}\right)!}{\prod _{i=1}^{l}{m_{i}!}}}.}
例えば、MISSISSIPPIという単語の異なるアナグラムの数は次の通りです。[ 38 ] 11 ! 1 ! 4 ! 4 ! 2 ! = 34650. {\displaystyle {\frac {11!}{1!\,4!\,4!\,2!}}=34650.}
多重集合Mの k 順列は、 Mの k 要素のシーケンスであり、各要素はM での多重度(要素の繰り返し数 ) 以下の回数だけ出現します。
循環順列 順列は、配置として捉えられる場合、線状 配置と呼ばれることがある。しかし、物体が円形に配置されている場合、この明確な順序付けは弱まる。配置には「最初の要素」は存在せず、どの要素も開始点とみなせるからである。異なる物体を円形に配置することを円順列 という。[ 39 ] [ e ] これらは、線状配置の最終要素を先頭に移動させることによって生成される同値関係 に基づき、これらの物体の通常の順列の同値類 として正式に定義することができる。
2つの円順列は、一方を他方に回転させることができる場合、等価です。次の4つの文字の円順列は、同じであるとみなされます。
1 4 3 2 4 2 1 3 2 3 4 1 3 1 2 4 {\displaystyle {\begin{matrix}&1&\\4&&3\\&2&\end{matrix}}\qquad {\begin{matrix}&4&\\2&&1\\&3&\end{matrix}}\qquad {\begin{matrix}&2&\\3&&4\\&1&\end{matrix}}\qquad {\begin{matrix}&3&\\1&&2\\&4&\end{matrix}}}
円形の配置は反時計回りに読み取られるため、回転によって一方が他方に近づくことはできないため、次の 2 つは同等ではありません。
1 4 3 2 1 3 4 2 {\displaystyle {\begin{matrix}&1&\\4&&3\\&2&\end{matrix}}\qquad {\begin{matrix}&1&\\3&&4\\&2&\end{matrix}}}
n 個の要素を持つ集合には( n – 1)! 通りの円順列が存在します。
プロパティ n 個 の異なるオブジェクトの順列の数はn ! です。
k 個の互いに素な閉路を持つn 順列の数は第一種 符号なしスターリング数であり、またはで表される。c ( n , k ) {\displaystyle c(n,k)} [ n k ] {\displaystyle [{\begin{smallmatrix}n\\k\end{smallmatrix}}]}
サイクルタイプ n 個の要素を持つ集合の順列の循環(不動点を含む)は、その集合を分割する。したがって、これらの循環の長さはn の整数分割 を形成し、これはの循環型 (あるいは循環構造 、循環形状 )と呼ばれる。循環型には、 のすべての不動点に対して「1」が、すべての転置に対して「2」が、といった具合である。 の循環型は、σ {\displaystyle \sigma } σ {\displaystyle \sigma } σ {\displaystyle \sigma } β = ( 1 2 5 ) ( 3 4 ) ( 6 8 ) ( 7 ) {\displaystyle \beta =(1\,2\,5\,)(\,3\,4\,)(6\,8\,)(\,7\,)} ( 3 , 2 , 2 , 1 ) . {\displaystyle (3,2,2,1).}
これはより簡潔な形で[1 1 2 2 3 1 ] と書くこともできる。より正確には、一般形は であり、それぞれの長さの閉路の数である。与えられた閉路型における順列の数は[ 41 ]である。 [ 1 α 1 2 α 2 ⋯ n α n ] {\displaystyle [1^{\alpha _{1}}2^{\alpha _{2}}\dotsm n^{\alpha _{n}}]} α 1 , … , α n {\displaystyle \alpha _{1},\ldots ,\alpha _{n}}
n ! 1 α 1 2 α 2 ⋯ n α n α 1 ! α 2 ! ⋯ α n ! {\displaystyle {\frac {n!}{1^{\alpha _{1}}2^{\alpha _{2}}\dotsm n^{\alpha _{n}}\alpha _{1}!\alpha _{2}!\dotsm \alpha _{n}!}}} 。n 個の要素を持つ集合の循環タイプの数は、パーティション関数 の値に等しくなります。 p ( n ) {\displaystyle p(n)}
Polya のサイクル インデックス 多項式は、順列をそのサイクル タイプごとにカウントする 生成関数です。
順列活用 一般に、サイクル表記法で書かれた合成順列は、簡単に記述できるパターンには従いません。合成される順列のサイクルは、合成される順列のサイクルとは異なる場合があります。しかし、サイクル型は、順列を別の順列 で共役させる特殊なケース、つまり積を形成 する場合には保存されます。ここで、は によるの共役 であり、そのサイクル表記法は、 のサイクル表記法を取り、を のすべての要素に適用することで得られます。 したがって、2つの順列が同じサイクル型を持つ場合、それらはまさに共役です。 σ {\displaystyle \sigma } π {\displaystyle \pi } π σ π − 1 {\displaystyle \pi \sigma \pi ^{-1}} π σ π − 1 {\displaystyle \pi \sigma \pi ^{-1}} σ {\displaystyle \sigma } π {\displaystyle \pi } σ {\displaystyle \sigma } π {\displaystyle \pi }
順列の順序 順列の位数は、となる最小の正の整数m です。これは、その循環の長さの最小公倍数 です。例えば、 の位数はです。 σ {\displaystyle \sigma } σ m = i d {\displaystyle \sigma ^{m}=\mathrm {id} } σ = ( 152 ) ( 34 ) {\displaystyle \sigma =(152)(34)} lcm ( 3 , 2 ) = 6 {\displaystyle {\text{lcm}}(3,2)=6}
順列の偶奇性 有限集合のあらゆる順列は、転置の積として表すことができます。[ 43 ] 与えられた順列に対してこのような表現が多数存在する場合もありますが、それらはすべて転置の数が偶数か奇数かのどちらかです。したがって、すべての順列は、この数に応じて 偶数か奇数に分類できます。
この結果は、各順列に符号 ( と表記)を割り当てるように拡張できる。が偶数の場合、 が奇数の場合である。すると、2つの順列とsgn σ {\displaystyle \operatorname {sgn} \sigma } sgn σ = + 1 {\displaystyle \operatorname {sgn} \sigma =+1} σ {\displaystyle \sigma } sgn σ = − 1 {\displaystyle \operatorname {sgn} \sigma =-1} σ {\displaystyle \sigma } σ {\displaystyle \sigma } π {\displaystyle \pi }
sgn ( σ π ) = sgn σ ⋅ sgn π . {\displaystyle \operatorname {sgn} (\sigma \pi )=\operatorname {sgn} \sigma \cdot \operatorname {sgn} \pi .} すると、sgn ( σ σ − 1 ) = + 1. {\displaystyle \operatorname {sgn} \left(\sigma \sigma ^{-1}\right)=+1.}
順列の符号は、その順列行列 の行列式に等しくなります(下記)。
行列表現 順列行列は 、各列と各行に正確に 1 つの要素 1 を持ち、その他の要素はすべて 0 であるn × n 行列 です。順列行列を {1, 2, ..., n } の順列に割り当てる方法はいくつかあります。 1 つの自然な方法は、を の線形変換 として定義し、この線形変換では標準基底 が で置換され、 がその行列として定義されることです。 つまり、のj 番目 の列は n × 1 の列ベクトルに等しくなります。その ( i , j ) 要素は、 i = σ ( j )の場合は 1 になり、それ以外の場合は 0 になります。線形写像の合成は行列の乗算 によって記述されるため、この構成は順列の合成と互換性があります。 たとえば、1 行の順列の積は で、対応する行列は次のようになります。 L σ {\displaystyle L_{\sigma }} R n {\displaystyle \mathbb {R} ^{n}} { e 1 , … , e n } {\displaystyle \{\mathbf {e} _{1},\ldots ,\mathbf {e} _{n}\}} L σ ( e j ) = e σ ( j ) {\displaystyle L_{\sigma }(\mathbf {e} _{j})=\mathbf {e} _{\sigma (j)}} M σ {\displaystyle M_{\sigma }} M σ {\displaystyle M_{\sigma }} e σ ( j ) {\displaystyle \mathbf {e} _{\sigma (j)}} M σ M τ = M σ τ . {\displaystyle M_{\sigma }M_{\tau }=M_{\sigma \tau }.} σ = 213 , τ = 231 {\displaystyle \sigma =213,\ \tau =231} σ τ = 132 {\displaystyle \sigma \tau =132} M σ M τ = ( 0 1 0 1 0 0 0 0 1 ) ( 0 0 1 1 0 0 0 1 0 ) = ( 1 0 0 0 0 1 0 1 0 ) = M σ τ . {\displaystyle M_{\sigma }M_{\tau }={\begin{pmatrix}0&1&0\\1&0&0\\0&0&1\end{pmatrix}}{\begin{pmatrix}0&0&1\\1&0&0\\0&1&0\end{pmatrix}}={\begin{pmatrix}1&0&0\\0&0&1\\0&1&0\end{pmatrix}}=M_{\sigma \tau }.}
順列行列の乗算に対応する順列の合成。 文献では、逆の慣例も一般的です。つまり、置換σ は、( i , j ) 要素が j = σ ( i ) の場合には 1 、それ以外の場合には 0 となる行列に関連付けられます。この慣例において、置換行列は置換とは逆の順序で乗算されます。つまり、 です。この対応関係において、置換行列は 標準行ベクトルの右側に作用します。P σ = ( M σ ) − 1 = ( M σ ) T {\displaystyle P_{\sigma }=(M_{\sigma })^{-1}=(M_{\sigma })^{T}} P σ P τ = P τ σ {\displaystyle P_{\sigma }P_{\tau }=P_{\tau \sigma }} 1 × n {\displaystyle 1\times n} ( e i ) T {\displaystyle ({\bf {e}}_{i})^{T}} ( e i ) T P σ = ( e σ ( i ) ) T {\displaystyle ({\bf {e}}_{i})^{T}P_{\sigma }=({\bf {e}}_{\sigma (i)})^{T}}
右側の Cayley 表には、3 つの要素の順列に対するこれらの行列が表示されてい ます。
全順序集合の順列 いくつかの応用では、置換される集合の要素同士を比較します。この場合、集合Sは任意の2つの要素を比較できるように 全順序性 を持つ必要があります。これらの応用では、通常の≤関係を持つ集合{1, 2, ..., n }が最も頻繁に使用されます。
順列を 1 行表記でシーケンスとして記述した場合、順列の多くの特性はS の全順序に直接関係します。 σ = σ ( 1 ) σ ( 2 ) ⋯ σ ( n ) {\displaystyle \sigma =\sigma (1)\sigma (2)\cdots \sigma (n)}
登り、下り、走行、超過、記録n の順列 σ における 上昇とは、 i < n の任意の位置において、次の値が現在の値よりも大きい場合のことです。つまり、i が 上昇となるのは、次の値がある場合です。例えば、順列 3452167 には、(位置)1、2、5、6 に上昇があります。 σ ( i ) < σ ( i + 1 ) {\displaystyle \sigma (i)<\sigma (i{+}1)}
同様に、下降は の場合 の位置i < n なので、の場合のすべてのi は上昇か下降のいずれかです。 σ ( i ) > σ ( i + 1 ) {\displaystyle \sigma (i)>\sigma (i{+}1)} 1 ≤ i < n {\displaystyle 1\leq i<n}
順列の昇順連は 、どちらの端にも延長できない、空でない増加する連続部分列である。これは連続する上昇の最大列に対応する(後者は空である可能性がある。連続する2つの下降の間には、長さ1の昇順連が存在する)。対照的に、順列の増加部分 列は必ずしも連続しているわけではない。これは、1行表記のいくつかの値を省略することによって得られる増加列である。例えば、順列2453167には、昇順連として245、3、167が含まれるが、増加部分列として2367が含まれる。
順列にk −1回の降下がある場合、それはk 回の昇順の和集合でなければならない。
n からk 回上昇する順列の数は(定義により)オイラー数である。これはまた、 n からk 回下降する順列の数でもある。しかし、一部の研究者はオイラー数をk 回 上昇する順列の数、つまりk − 1 回下降する順列の数と定義している。⟨ n k ⟩ {\displaystyle \textstyle \left\langle {n \atop k}\right\rangle } ⟨ n k ⟩ {\displaystyle \textstyle \left\langle {n \atop k}\right\rangle }
順列σ 1 σ 2 ... σ n の超過とは、σ j > j を満たす添え字j である。不等式が厳密でない場合(すなわち、σ j ≥ j )、jは 弱い超過 と呼ばれる。k回 の超過を伴うn 順列の数は、k 回の降下を伴うn 順列の数と一致する。
順列 σ のレコードまたは左から右への最大値は、すべての j < iに対して σ ( j ) < σ ( i )となる要素i です。
フォアタの遷移補題フォアタ の基本一対一変換は 、与えられた標準閉路形式を持つ順列σ を、括弧を取り除いた同じ要素の列を一行表記で表す順列に変換する。 [ 27 ] 例えば、 f ( σ ) = σ ^ {\displaystyle f(\sigma )={\hat {\sigma }}} σ = ( 513 ) ( 6 ) ( 827 ) ( 94 ) = ( 1 2 3 4 5 6 7 8 9 3 7 5 9 1 6 8 2 4 ) , {\displaystyle \sigma =(513)(6)(827)(94)={\begin{pmatrix}1&2&3&4&5&6&7&8&9\\3&7&5&9&1&6&8&2&4\end{pmatrix}},}
σ ^ = 513682794 = ( 1 2 3 4 5 6 7 8 9 5 1 3 6 8 2 7 9 4 ) . {\displaystyle {\hat {\sigma }}=513682794={\begin{pmatrix}1&2&3&4&5&6&7&8&9\\5&1&3&6&8&2&7&9&4\end{pmatrix}}.}
ここで、 σ の各標準サイクルの最初の要素は、のレコード(左から右への最大値)になります。 が与えられている場合、そのレコードを見つけ、括弧を挿入することで逆変換 を構築できます。上記の例のレコードに下線を引いてください。これにより、 σ のサイクルを再構築できます。 σ ^ {\displaystyle {\hat {\sigma }}} σ ^ {\displaystyle {\hat {\sigma }}} σ = f − 1 ( σ ^ ) {\displaystyle \sigma =f^{-1}({\hat {\sigma }})} σ ^ = 5 _ 1 3 6 _ 8 _ 2 7 9 _ 4 {\displaystyle {\hat {\sigma }}={\underline {5}}\,1\,3\,{\underline {6}}\,{\underline {8}}\,2\,7\,{\underline {9}}\,4}
次の表は、 S = {1, 2, 3}の 6 つの順列について、およびσ を示しています。各辺の太字のテキストは、一対一表現で使用される表記を示しています。 については 1 行表記、 σ については標準循環表記です。 σ ^ {\displaystyle {\hat {\sigma }}} σ ^ {\displaystyle {\hat {\sigma }}}
σ ^ = f ( σ ) σ = f − 1 ( σ ^ ) 123 = ( 1 ) ( 2 ) ( 3 ) 123 = ( 1 ) ( 2 ) ( 3 ) 132 = ( 1 ) ( 3 2 ) 132 = ( 1 ) ( 3 2 ) 213 = ( 2 1 ) ( 3 ) 213 = ( 2 1 ) ( 3 ) 231 = ( 3 1 2 ) 321 = ( 2 ) ( 3 1 ) 312 = ( 3 2 1 ) 231 = ( 3 1 2 ) 321 = ( 2 ) ( 3 1 ) 312 = ( 3 2 1 ) {\displaystyle {\begin{array}{l|l}{\hat {\sigma }}=f(\sigma )&\sigma =f^{-1}({\hat {\sigma }})\\\hline \mathbf {123} =(\,1\,)(\,2\,)(\,3\,)&123=\mathbf {(\,1\,)(\,2\,)(\,3\,)} \\\mathbf {132} =(\,1\,)(\,3\,2\,)&132=\mathbf {(\,1\,)(\,3\,2\,)} \\\mathbf {213} =(\,2\,1\,)(\,3\,)&213=\mathbf {(\,2\,1\,)(\,3\,)} \\\mathbf {231} =(\,3\,1\,2\,)&321=\mathbf {(\,2\,)(\,3\,1\,)} \\\mathbf {312} =(\,3\,2\,1\,)&231=\mathbf {(\,3\,1\,2\,)} \\\mathbf {321} =(\,2\,)(\,3\,1\,)&312=\mathbf {(\,3\,2\,1\,)} \end{array}}} 最初の系として、ちょうどk 個のレコードを持つ n 順列 の数は、ちょうどk 個のサイクルを持つ n 順列の数に等しい。この最後の数は第一種の符号なしスターリング数 である。さらに、Foata の写像は、k 個 の弱い超過を持つn順列を、 k − 1個の上昇を持つ n 順列に変換する。 たとえば、(2)(31) = 321 にはk = 2 個の弱い超過 (インデックス 1 と 2) があるが、f (321) = 231には k − 1 = 1 個の 上昇 (インデックス 1、つまり 2 から 3 へ) がある。c ( n , k ) {\displaystyle c(n,k)}
反転 15パズル では、マス目を昇順に並べることが目的です。反転回数が奇数である初期配置は解けません。[ 48 ] 順列 σ の反転と は、順列の要素が逆の順序になっている位置のペア(i、j)のことである。 [ 49 ] したがって 、 隣接する2つの位置における反転である。例えば、σ = 23154 では(i 、j )=(1、3)、(2、3)、(4、5)となり、ここで(σ (i )、σ (j ))=(2、1)、(3、1)、(5、4)となる。 i < j {\displaystyle i<j} σ ( i ) > σ ( j ) {\displaystyle \sigma (i)>\sigma (j)}
反転は値のペア(σ (i )、σ (j ))として定義されることがあります。これは反転の 数 には影響せず、逆のペア(σ (j )、σ (i ))は、逆順列 σ −1 に対する上記の意味での反転です。
反転の数は、順列の要素が順序どおりでない程度を測る重要な尺度であり、σ とσ −1について同じです。 k 個の反転を持つ順列を順序どおりに整列させる(つまり、恒等順列に変換する) ことは、隣接する転置 を(右乗算で) 連続して適用することによって常に可能であり、 k 回のそのような操作のシーケンスが必要です。さらに、隣接する転置については、任意の合理的な選択が機能します。各ステップで、 i とi + 1 の転置を選択すれば十分です。ここで、 i は 、これまでに修正された順列の降下です (そのため、転置により、この特定の降下は削除されますが、他の降下が作成される場合があります)。これは、このような転置を適用すると、反転の数が 1 減少するためです。この数が 0 でない限り、順列は恒等ではないため、少なくとも 1 つの降下があります。バブルソート と挿入ソートは 、シーケンスを順序付けるこの手順の特殊な例として解釈できます。ちなみに、この手順は、任意の順列σ が隣接する転置の積として表せることを証明しています。これは、σ を 恒等転置に変換する任意の転置シーケンスを単純に反転すれば良いためです。実際、σ を 恒等転置に変換するすべての隣接する転置シーケンスを列挙することで(反転後に)、σ を 隣接する転置の積として 表す最小の長さの式すべての完全な リストが得られます。
nの k 回の反転を伴う順列の数はマホーニアン数 で表される。これは積の展開における 係数である。q k {\displaystyle q^{k}}
[ n ] q ! = ∏ m = 1 n ∑ i = 0 m − 1 q i = 1 ( 1 + q ) ( 1 + q + q 2 ) ⋯ ( 1 + q + q 2 + ⋯ + q n − 1 ) , {\displaystyle [n]_{q}!=\prod _{m=1}^{n}\sum _{i=0}^{m-1}q^{i}=1\left(1+q\right)\left(1+q+q^{2}\right)\cdots \left(1+q+q^{2}+\cdots +q^{n-1}\right),}
表記はq階乗 を表します。この展開はネックレス の研究ではよく見られます。 [ n ] q ! {\displaystyle [n]_{q}!}
と となるようなものとしよう。この場合、逆元 の重みはであるとする。小林(2011)は列挙公式 σ ∈ S n , i , j ∈ { 1 , 2 , … , n } {\displaystyle \sigma \in S_{n},i,j\in \{1,2,\dots ,n\}} i < j {\displaystyle i<j} σ ( i ) > σ ( j ) {\displaystyle \sigma (i)>\sigma (j)} ( i , j ) {\displaystyle (i,j)} σ ( i ) − σ ( j ) {\displaystyle \sigma (i)-\sigma (j)} ∑ i < j , σ ( i ) > σ ( j ) ( σ ( i ) − σ ( j ) ) = | { τ ∈ S n ∣ τ ≤ σ , τ is bigrassmannian } {\displaystyle \sum _{i<j,\sigma (i)>\sigma (j)}(\sigma (i)-\sigma (j))=|\{\tau \in S_{n}\mid \tau \leq \sigma ,\tau {\text{ is bigrassmannian}}\}}
ここで、 は対称群 におけるブルハット順序 を表す。この次数付き半順序は、コクセター群 の文脈でしばしば現れる。 ≤ {\displaystyle \leq }
コンピューティングにおける順列
順列の番号付け n 個のものの順列を表す 1 つの方法は、 0 ≤ N < n ! となる整数N を使用することです。ただし、数値と、順列の表現を順序付けられた配列 (シーケンス) として変換する便利な方法が提供される必要があります。これは任意の順列の最もコンパクトな表現を与え、コンピューティングにおいては、n が十分小さくN を マシン ワードで保持できる場合に特に魅力的です。32 ビット ワードの場合、これはn ≤ 12 を意味し、64 ビット ワードの場合、これはn ≤ 20 を意味します。変換は、数値のシーケンスd n 、d n −1 、...、d 2 、d 1 の中間形式を介して実行できます。ここで、 d i はi 未満の負でない整数です( d 1 は常に 0 であるため省略できますが、これがあることで、後続の順列への変換の記述が容易になります)。最初のステップは、Nを 階乗数法 で表現することです。これは、n ! 未満の数の場合、連続する桁の基数(位取りまたは乗算係数)が( n −1)! 、( n −2)! 、...、2!、1!となる特定の混合基数表現です。2番目のステップでは、このシーケンスをLehmerコード、 または(ほぼ等価的に)反転表として解釈します。
Rothe図σ = ( 6 , 3 , 8 , 1 , 4 , 9 , 7 , 2 , 5 ) {\displaystyle \sigma =(6,3,8,1,4,9,7,2,5)} σ i
私
1 2 3 4 5 6 7 8 9 レーマーコード 1 × × × × × • d 9 = 5 2 × × • d 8 = 2 3 × × × × × • d 7 = 5 4 • d 6 = 0 5 × • d 5 = 1 6 × × × • d 4 = 3 7 × × • d 3 = 2 8 • d 2 = 0 9 • d 1 = 0 逆さ台 3 6 1 2 4 0 2 0 0
順列 σの レーマーコード において、数d n は 最初の項σ 1 の選択を表し 、数d n −1 は残りのn − 1個の要素の中から2番目の項 σ 2 の選択を表し 、以下同様である。より正確には、各d n +1− i は項σ i より小さい残りの 要素の数を与える。これらの残りの要素は後の項σ j として必ず現れるので、数字d n +1− i はi を小さい添え字とする 反転 ( i , j )の数( i < j かつσ i > σ j となる値j の数)を表す。σ の 反転表 も非常によく似ているが、ここではd n +1− k は 反転 ( i , j )の数を表し、ここでk = σ j は反転順に現れる2つの値のうち小さい方となる。
両方のエンコードは、 nバイ n の Rothe 図 [ 52 ] (ハインリヒ・アウグスト・ローテ にちなんで名付けられた)で視覚化できます。この図では、 ( i , σ i ) のドットが順列のエントリを示し、 ( i , σ j ) のバツが反転 ( i , j ) を示します。反転の定義により、その列のドット ( j , σ j ) の前であり、かつその行のドット ( i , σ i ) の前にあるマス目にはバツが表示されます。Lehmer コードは連続する行のバツの数をリストし、反転表は連続する列のバツの数をリストします。これは逆順列の Lehmer コードであり、その逆も同様です。
Lehmer コードd n 、d n −1 、 ...、d 2 、d 1 を順序付きセットSの順列に効果的に変換するには、 S の要素を昇順で並べたリストから開始し、 i が1 からnまで増加する場合、 σ i を 、リスト内でその前にd n +1− i 個の他の要素がある要素に設定し、その要素をリストから削除します。 反転表d n 、d n −1 、 ...、d 2 、d 1を対応する順列に変換するには、最初は空のシーケンスに S の要素を最大から最小の順に挿入しながら、d 1から d n までの数をトラバースします。反転表の数d を使用するステップでは、 Sの要素が、すでに存在する d 個の要素が前に存在するポイントでシーケンスに挿入されます。あるいは、 n 個 の空きスロットの行から始めて、反転表の数字とS の要素の両方を逆の順序で処理し、各ステップでS の要素を、他のd 個の空きスロットが先行する空きスロットに配置することもできます。
連続する自然数を 階乗数システムに変換すると、それらのシーケンスは辞書式順序 で生成されます(混合基数システムの場合と同様)。さらにそれらを順列に変換すると、Lehmer コード解釈が使用されている場合は辞書式順序が保持されます (反転表を使用すると異なる順序が得られ、最初のエントリの値ではなく、エントリ 1 の場所 によって順列を比較することから始めます)。階乗数システム表現の数の合計は、順列の反転の数を示し、その合計の偶奇は順列のシグネチャを 示します。さらに、反転表のゼロの位置は、順列の左から右への最大値 (例では 6、8、9) を示しますが、Lehmer コード内のゼロの位置は、右から左への最小値 (例では、値 1、2、5 の 4、8、9 の位置) です。これにより、すべての順列における極値の分布を計算できます。Lehmerコードd n , d n −1 , ..., d 2 , d 1を持つ順列には、 d i ≥ d i +1 の場合にのみ、n − i の上昇があります。
順列を生成するアルゴリズム 計算において、与えられた値の列の順列を生成する必要が生じる場合があります。この処理に最適な手法は、ランダムに選択された順列をいくつか生成したいのか、それともすべての順列を生成するのか、そして後者の場合は特定の順序付けが必要かどうかによって異なります。また、与えられた列の要素間に等号が存在する可能性を考慮する必要があるかどうかも問題となります。等号が存在する場合、列の異なる多重集合順列のみを生成する必要があります。
n の順列を生成する明白な方法は、 Lehmer コード の値を生成し(おそらくn までの整数の階乗 表現を使用)、それを対応する順列に変換することです。しかし、後者のステップは単純ですが、シーケンスからの選択と任意の位置からの削除のそれぞれn 回の操作が必要なため、効率的に実装するのは困難です。シーケンスを配列またはリンク リスト として表現する明白な方法のどちらも、変換を実行するために(それぞれ異なる理由により) 約n 2 /4 回の操作が必要です。n は かなり小さい可能性が高いため (特にすべての順列を生成する必要がある場合)、それほど問題にはなりませんが、ランダム生成と体系的生成の両方に対して、はるかに優れた単純な代替手段があることがわかります。このため、 Lehmer コードから順列への変換をO ( n log n ) 時間 で実行できる特別なデータ構造を使用することは、確かに可能ですが、有用ではないようです。
順列のランダム生成 n 個の値のシーケンスからランダムな順列 を生成する場合、シーケンスにランダムに選択されたn の順列を適用するか、シーケンスの異なる順列(多重集合)の集合からランダムな要素を選択するかは関係ありません。これは、値が重複している場合、同じ順列になるn の異なる順列が多数存在する可能性があるとしても、各結果に対してそのような順列の数は等しくなるためです。n が大きくなると n ! の増加により不可能になる体系的な生成とは異なり、ランダム 生成 ではn が小さいと 仮定する理由はありません。
ランダムな順列を生成するための基本的な考え方は、0 ≤ d i < i ( d 1 は常に 0 なので省略できる) を満たすn ! 個の整数シーケンスd 1 , d 2 ,..., d n の 1 つをランダムに生成し、これを全単射 対応によって順列に変換することである。後者の対応については、(逆) シーケンスをレーマー コードとして解釈することができ、これによって、1938 年にロナルド フィッシャー とフランク イェーツ によって初めて発表された生成方法が得られる。[ 53 ] 当時はコンピュータ実装は問題ではなかったが、この方法は、上記で概説したように、レーマー コードから順列に効率的に変換するという困難を抱えている。これは、別の全単射対応を使用することで改善できる。つまり、d i を使用してシーケンスの残りのi 個の要素から要素を選択した後 ( i の値が減少するため)、要素を削除してさらに要素を 1 つ下げてシーケンスをコンパクト化するのではなく、その要素を最後に残った要素と交換するの である。したがって、選択対象となる残りの要素は、元のシーケンスと同じ順序で出現しない場合でも、各時点において連続した範囲を形成します。整数シーケンスから順列へのマッピングは多少複雑ですが、即時帰納法 によって、各順列が正確に1つの方法で生成されることがわかります。選択された要素が最後に残った要素である場合、スワップ操作は省略できます。これは条件のテストを正当化するほど頻繁に発生するものではありませんが、すべての順列が生成できることを保証するためには、最後の要素が選択候補に含まれている必要があります。
のランダムな順列を生成するアルゴリズムは、擬似コード で次のように記述できます。 a [0], a [1], ..., a [n − 1]
i が n から 2まで実行し、 d i ← { 0, ..., i − 1 } のランダムな要素を取り、 a [ d i ] とa [ i − 1] を入れ替える これは次のように 配列の初期化と組み合わせることができる。a [i ] = i
i が0から n −1までの 場合、 d i +1 ← { 0, ..., i } のランダムな要素a [ i ] ← a [ d i +1 ] a [ d i +1 ] ← i d i +1 = i の場合、最初の割り当てでは初期化されていない値がコピーされますが、2 番目の割り当てでは正しい値i で上書きされます。
しかし、フィッシャー・イェーツ法は順列を生成するための最速のアルゴリズムではない。なぜなら、フィッシャー・イェーツ法は本質的に順次的なアルゴリズムであり、「分割統治」の手順で並列に同じ結果を得ることができるからである。[ 54 ]
辞書順生成 与えられたシーケンスのすべての順列を体系的に生成する方法は数多くある。[ 55 ] 古典的で単純かつ柔軟なアルゴリズムの1つは、辞書式順序 で次の順列が存在する場合にそれを見つけることに基づいている。このアルゴリズムは重複する値を扱うことができ、重複する値の場合は、異なる多重集合順列をそれぞれ1回生成する。通常の順列の場合でも、Lehmerコードの値を辞書式順序で生成し(階乗数システムを 使用する可能性もある)、それを順列に変換するよりもはるかに効率的である。このアルゴリズムは、シーケンスを(弱く)昇順でソートすることから始め(辞書式順序で最小の順列を与える)、次に次の順列が見つかる限り、次の順列に進むことを繰り返します。この方法は14世紀インドの Narayana Pandita にまで遡り、頻繁に再発見されている。
以下のアルゴリズムは、与えられた順列の辞書順で次の順列を生成します。与えられた順列をその場で変更します。
a [ k ] < a [ k + 1] を満たす最大のインデックスk を見つけます。そのようなインデックスが存在しない場合は、順列は最後の順列となります。a [ k ] < a [ l ] となる、k より大きい最大のインデックスl を見つけます。a [ k ] の値とa [ l ]の値を交換します。a [ k + 1] から最後の要素 a [ n ]までのシーケンスを逆にします。たとえば、シーケンス [1, 2, 3, 4] (昇順) が与えられ、インデックスが0 から始まる 場合、手順は次のようになります。
インデックスk = 2 です。これは、3 が、 a [ k + 1] である 4より小さい最大のインデックスであるという条件を満たすインデックスに配置されているためです。 インデックスl = 3 です。条件 a [ k ] < a [ l ]を満たすために、シーケンス内で 3 より大きい値は 4 のみであるためです。 a [2]とa [3]の値が入れ替えられ、新しいシーケンス[1, 2, 4, 3]が形成されます。k インデックスa [2]から最終要素までのシーケンスは反転されます。このインデックスの後に続く値は 1 つだけ(3)であるため、このインスタンスではシーケンスは変更されません。したがって、初期状態の辞書式順序は [1, 2, 4, 3] と入れ替わります。このアルゴリズムに従うと、次の辞書式順列は [1, 3, 2, 4] となり、24 番目の順列は [4, 3, 2, 1] になります。この時点ではa [ k ] < a [ k + 1] は存在せず、これが最後の順列であることを示します。
この方法では、最初のソートを除いて、シーケンス全体にわたって償却される順列ごとに約3回の比較と1.5回の交換が使用されます。[ 57 ]
最小限の変更による世代 上記のアルゴリズムの代替として、シュタインハウス・ジョンソン・トロッターアルゴリズムが 提案されている。これは、与えられたシーケンスのすべての順列に順序付けを行い、その出力における任意の2つの連続する順列が、隣接する2つの値を入れ替えることによって異なるという性質を持つ。この順列の順序付けは17世紀のイギリスの鐘つき人に知られており、彼らはこれを「プレーンチェンジ」と呼んでいた。この手法の利点の一つは、順列間の変化が小さいため、順列ごとに定数時間で実装できることである。また、同じ手法を用いて、出力順列を1つおきにスキップすることで、偶数順列のサブセットも順列ごとに定数時間で容易に生成することができる。
スタインハウス・ジョンソン・トロッターの代替としてヒープアルゴリズム [ 58 ] があり、これは1977年にロバート・セジウィック によってアプリケーションにおける順列生成の最速アルゴリズムであると言われました[ 55 ] 。
次の図は、長さ のすべての順列を生成するための前述の 3 つのアルゴリズムと、文献に記載されている 6 つの追加アルゴリズム の出力を示しています。n = 4 {\displaystyle n=4}
異なるアルゴリズムによって生成された長さのすべての順列の順序。順列は色分けされており、n = 4 {\displaystyle n=4} 1 、 2 、 3 、 4. [ 59 ] 辞書式順序; シュタインハウス・ジョンソン・トロッターアルゴリズム ;ヒープアルゴリズム ;エーリッヒのスター転置アルゴリズム:各ステップで、順列の最初のエントリが後のエントリと交換されます。 Zaksのプレフィックス反転アルゴリズム:[ 60 ] 各ステップで、現在の順列のプレフィックスを反転して次の順列を取得します。 沢田-ウィリアムズのアルゴリズム: [ 61 ] 各順列は、1つの位置の巡回左シフト、または最初の2つのエントリの交換によって前の順列と異なります。 コーベットのアルゴリズム: [ 62 ] 各順列は、ある接頭辞を1つ左に循環シフトすることによって前の順列と異なります。 シングルトラック順序付け:[ 63 ] 各列は他の列の巡回シフトである。 シングルトラックグレイコード :[ 63 ] 各列は他の列の巡回シフトであり、任意の2つの連続する順列は1つまたは2つの転置のみが異なる。 ネストされたスワップを生成するアルゴリズムは、ネストされたサブグループに接続されたステップで構成されています。各順列は、前の順列から左への転置乗算によって得られます。このアルゴリズムは、インデックスの階乗法と接続されています。 S k ⊂ S k + 1 {\displaystyle S_{k}\subset S_{k+1}}
ネストされたスワップステップにおける順列の生成 スワップ(転置、2サイクル)の明示的なシーケンスがここで説明されており、各スワップは(左側で)前のチェーンに適用されて新しい順列を提供し、すべての順列をそれぞれ1回だけ取得できます。[ 64 ] このカウント/生成手順には、ステップごとに示される追加の構造(ネストされていると呼ぶ)があります。 を完全に取得した後、後述するコセット の代表を適切に選択することにより、のコセットによって取得を続けます。それぞれが順番に生成されるため、最後の要素 があります。したがって、スワップによって生成した後、 の次の順列は、何らかの についてで ある必要があります。次に、生成されたすべてのスワップが 繰り返され、コセット 全体を生成して、そのコセット の最後の順列に到達します。次のスワップでは、順列を別のコセット の代表に移動する必要があります。 ( p q ) {\displaystyle (pq)} S k − 1 {\displaystyle S_{k-1}} S k ∖ S k − 1 {\displaystyle S_{k}\backslash S_{k-1}} S k − 1 τ i {\displaystyle S_{k-1}\tau _{i}} S k − 1 {\displaystyle S_{k-1}} S k {\displaystyle S_{k}} τ i {\displaystyle \tau _{i}} S m {\displaystyle S_{m}} λ m ∈ S m {\displaystyle \lambda _{m}\in S_{m}} S k − 1 {\displaystyle S_{k-1}} S k ∖ S k − 1 {\displaystyle S_{k}\backslash S_{k-1}} τ 1 = ( p 1 k ) λ k − 1 {\displaystyle \tau _{1}=(p_{1}k)\lambda _{k-1}} 1 ≤ p 1 < k {\displaystyle 1\leq p_{1}<k} S k − 1 {\displaystyle S_{k-1}} S k − 1 τ 1 {\displaystyle S_{k-1}\tau _{1}} λ k − 1 τ 1 {\displaystyle \lambda _{k-1}\tau _{1}} τ 2 = ( p 2 k ) λ k − 1 τ 1 {\displaystyle \tau _{2}=(p_{2}k)\lambda _{k-1}\tau _{1}}
同じ方法を続けると、 の剰余類の 剰余類代表が得られる。順序付き集合( ) は剰余類開始集合と呼ばれる。これらの代表のうち2つが同じ剰余類に属するのは 、 の 場合に限り、すなわちである。結論として、順列がすべて異なる剰余類の代表となるのは、任意の に対して の場合に限り 、である(繰り返し条件なし)。特に、生成されたすべての順列が異なっているために、値が異なっている必要はない。この過程で が得られ、これが再帰手順を提供する。 τ j = ( p j k ) λ k − 1 ⋯ λ k − 1 ( p i k ) λ k − 1 ⋯ λ k − 1 ( p 1 k ) λ k − 1 {\displaystyle \tau _{j}=(p_{j}k)\lambda _{k-1}\cdots \lambda _{k-1}(p_{i}k)\lambda _{k-1}\cdots \lambda _{k-1}(p_{1}k)\lambda _{k-1}} S k − 1 {\displaystyle S_{k-1}} S k {\displaystyle S_{k}} ( p 1 , … , p k − 1 ) {\displaystyle (p_{1},\ldots ,p_{k-1})} 0 ≤ p i < k {\displaystyle 0\leq p_{i}<k} τ j ( τ i ) − 1 = ( p j k ) λ k − 1 ( p j − 1 k ) λ k − 1 ⋯ λ k − 1 ( p i + 1 k ) = ϰ i j ∈ S k − 1 {\displaystyle \tau _{j}(\tau _{i})^{-1}=(p_{j}k)\lambda _{k-1}(p_{j-1}k)\lambda _{k-1}\cdots \lambda _{k-1}(p_{i+1}k)=\varkappa _{ij}\in S_{k-1}} ϰ i j ( k ) = k {\displaystyle \varkappa _{ij}(k)=k} τ i ∈ S k − S k − 1 {\displaystyle \tau _{i}\in S_{k}-S_{k-1}} k > j > i ≥ 1 {\displaystyle k>j>i\geq 1} ( λ k − 1 ) j − i p i ≠ p j {\displaystyle (\lambda _{k-1})^{j-i}p_{i}\neq p_{j}} p i {\displaystyle p_{i}} λ k = λ k − 1 ( p k − 1 k ) λ k − 1 ( p k − 2 k ) λ k − 1 ⋯ λ k − 1 ( p 1 k ) λ k − 1 {\displaystyle \lambda _{k}=\lambda _{k-1}(p_{k-1}k)\lambda _{k-1}(p_{k-2}k)\lambda _{k-1}\cdots \lambda _{k-1}(p_{1}k)\lambda _{k-1}}
例: 明らかに、の場合、 が成り立ちます。 を構築するには、重複なし条件を満たす剰余類の始まりの 2 つの可能性しかありません。選択すると になります。 を生成し続けるには、適切な剰余類の始まり (重複なし条件を満たす) が必要です。 という便利な選択肢があり、 になります 。次に、剰余類の始まり (重複なし条件を満たす) の便利な選択肢を構築するには となり、 になります。 λ 2 {\displaystyle \lambda _{2}} λ 2 = ( 12 ) {\displaystyle \lambda _{2}=(12)} λ 3 {\displaystyle \lambda _{3}} p 1 = p 2 = 1 {\displaystyle p_{1}=p_{2}=1} λ 3 = λ 2 ( 13 ) λ 2 ( 13 ) λ 2 = ( 13 ) {\displaystyle \lambda _{3}=\lambda _{2}(13)\lambda _{2}(13)\lambda _{2}=(13)} S 4 {\displaystyle S_{4}} p 1 = 1 , p 2 = 2 , p 3 = 3 {\displaystyle p_{1}=1,p_{2}=2,p_{3}=3} λ 4 = ( 13 ) ( 1234 ) ( 13 ) = ( 1432 ) {\displaystyle \lambda _{4}=(13)(1234)(13)=(1432)} λ 5 {\displaystyle \lambda _{5}} p 1 = p 2 = p 3 = p 4 = 1 {\displaystyle p_{1}=p_{2}=p_{3}=p_{4}=1} λ 5 = ( 15 ) {\displaystyle \lambda _{5}=(15)}
上記の例から、における の剰余類の始まりを次のように選択することで、同様の方法でより高次の へ誘導的に進むことができます。偶数の場合、剰余類の始まりがすべて 1 に等しくなるように選択し、奇数の場合、剰余類の始まりが に等しくなるように選択します。このような選択により、「最後の」順列は奇数 の場合に、偶数の場合に( ) になります。これらの明示的な式を使用することで、最小限の計算で、特定のインデックスの順列をカウント/生成ステップで簡単に計算できます。このために、インデックスを階乗基数で表すと便利です。たとえば、インデックスの順列はとなり、最終的に となります。 k {\displaystyle k} S k {\displaystyle S_{k}} S k + 1 {\displaystyle S_{k+1}} k {\displaystyle k} k {\displaystyle k} ( 1 , 2 , … , k ) {\displaystyle (1,2,\dots ,k)} λ k = ( 1 k ) {\displaystyle \lambda _{k}=(1k)} k {\displaystyle k} λ k = ( 1 k − ) ( 12 ⋯ k ) ( 1 k − ) {\displaystyle \lambda _{k}=(1k_{-})(12\cdots k)(1k_{-})} k {\displaystyle k} k − = k − 1 {\displaystyle k_{-}=k-1} 699 = 5 ( 5 ! ) + 4 ( 4 ! ) + 1 ( 2 ! ) + 1 ( 1 ! ) {\displaystyle 699=5(5!)+4(4!)+1(2!)+1(1!)} σ = λ 2 ( 13 ) λ 2 ( 15 ) λ 4 ( 15 ) λ 4 ( 15 ) λ 4 ( 15 ) λ 4 ( 56 ) λ 5 ( 46 ) λ 5 ( 36 ) λ 5 ( 26 ) λ 5 ( 16 ) λ 5 = {\displaystyle \sigma =\lambda _{2}(13)\lambda _{2}(15)\lambda _{4}(15)\lambda _{4}(15)\lambda _{4}(15)\lambda _{4}(56)\lambda _{5}(46)\lambda _{5}(36)\lambda _{5}(26)\lambda _{5}(16)\lambda _{5}=} λ 2 ( 13 ) λ 2 ( ( 15 ) λ 4 ) 4 ( λ 5 ) − 1 λ 6 = ( 23 ) ( 14325 ) − 1 ( 15 ) ( 15 ) ( 123456 ) ( 15 ) = {\displaystyle \lambda _{2}(13)\lambda _{2}((15)\lambda _{4})^{4}(\lambda _{5})^{-1}\lambda _{6}=(23)(14325)^{-1}(15)(15)(123456)(15)=} ( 23 ) ( 15234 ) ( 123456 ) ( 15 ) {\displaystyle (23)(15234)(123456)(15)} σ = ( 1653 ) ( 24 ) {\displaystyle \sigma =(1653)(24)}
スワップ順列による乗算は計算時間が短く、生成される新しい順列ごとにスワップ乗算を1回だけ行うため、この生成手順は非常に効率的です。さらに、単純な式が存在するため、各順列の最後の順列を取得することで、 予想よりも少ないステップで特定のインデックスを持つ順列に直接移動でき、さらに時間を節約できます。これは、スワップごとに処理するのではなく、サブグループのブロックごとに処理できるためです。 S k {\displaystyle S_{k}}
アプリケーション 順列は、ターボ符号 などの誤り検出・訂正アルゴリズムの インターリーバー 要素 で用いられます。例えば、3GPP Long Term Evolutionモバイル通信規格では、この考え方が用いられています(3GPP技術仕様36.212 [ 65 ] を参照)。このような応用では、特定の望ましい特性を満たす順列を高速に生成する方法が求められます。その方法の一つは、順列多項式 に基づいています。また、ユニーク順列ハッシュにおける最適ハッシュの基盤としても用いられています。[ 66 ]
参照
注記 ^ 1は非可換群の 単位元 を表すためによく使われる。 ^ 順序は暗黙的に理解されることが多い。整数の集合は小さいものから大きいものの順に自然に表記され、文字の集合は辞書式順序で表記される。その他の集合については、自然な順序を明示的に指定する必要がある。 ^ より正確には、繰り返しのない変化形 。この用語は他の言語でも依然として一般的であり、現代英語では翻訳で最も頻繁に登場する。 ^ この例における自然な順序は、元の単語の文字の順序です。 ^ 古い文献では、 circular permutation が cyclic permutation の同義語として使われることがありましたが、現在ではそうではありません。Carmichael (1956 , p. 7)
参考文献 ^ ウェブスター(1969) ^ マッコイ(1968年 、152ページ)^ ネリング(1970年 、86ページ)^ ヒース、トーマス・リトル (1981). 『ギリシャ数学史』 ニューヨーク: ドーバー出版. ISBN 0-486-24073-8 . OCLC 7703465 . ^ Broemeling, Lyle D. (2011年11月1日). 「アラブ暗号学における初期の統計的推論の解説」. The American Statistician . 65 (4): 255– 257. doi : 10.1198/tas.2011.10191 . S2CID 123537702 . ^ Biggs, NL (1979). 「組合せ論の根源」. Historia Math . 6 (2): 109– 136. doi : 10.1016/0315-0860(79)90074-0 . ^ Rejewski, Marian (1980). 「エニグマ暗号解読における順列理論の応用」 . Applicationes Mathematicae . 16 (4): 543– 559. doi : 10.4064/am-16-4-543-559 . ISSN 1233-7234 . ^ Cash, David (2019). 「CMSC 28400 暗号化入門 2019年秋 - ノート#2: 順列とエニグマ」 (PDF) . ^ Scheinerman, Edward A. (2012年3月5日). 「第5章 関数」 . 『数学:離散数学入門』 (第3版). Cengage Learning. 188ページ. ISBN 978-0840049421 . 2020年2月5日時点のオリジナルよりアーカイブ 。2020年2月5日 閲覧。順列を表すには、小文字のギリシャ文字(特にπ、σ、τ)を使用するのが慣例である。 ^ ロットマン 2002、41 ページ^ ボガート 1990、487 ページ^ Conway, John H.; Burgiel, Heidi; Goodman-Strauss, Chaim (2008). The Symmetries of Things . AK Peters. p. 179. 順列――例えば、複数の人の名前の順列――は、名前または人のいずれかを移動させるものと考えることができます。別名の観点では、順列は 各人に新しい名前または 別名を割り当てるものと見なされます(ラテン語の alias = 別の場所に由来)。一方、アリバイの観点では、人々を新しい名前に対応する場所に移動します(ラテン語の alibi = 別の場所に由来)。 ^ 「順列表記法 - Wikiversity」 . en.wikiversity.org . 2024年8月4日 閲覧 。 ^ アラバマ州コーシー (1815 年 1 月)。 「Mémoire Sur le Nombre des Valeurs qu'une Fonction peut acquérir, lorsqu'on y permute de toutes les manières possibles les quantités qu'elle renferme」 [関数内で、関数に含まれる変数をあらゆる可能な方法で並べ替えたときに、関数が取得できる値の数に関する回想録]。 Journal de l'École Polytechnique (フランス語)。 10 : 1~ 28。 4ページをご覧ください。 ^ Wussing, Hans (2007), 『抽象群概念の起源:抽象群理論の起源史への貢献』 Courier Dover Publications, p. 94, ISBN 9780486458687 コーシーは、1815 年に、配列を上下に書き、両方を括弧で囲む順列記法を初めて使用しました。 ^ ボガート 1990、17 ページ^ ガースタイン 1987、217 ページ^ a b アイグナー、マーティン (2007). 『列挙のコース 』 シュプリンガーGTM 238. pp. 24–25 . ISBN 978-3-540-39035-0 。^ ホール 1959、54 ページ^ Bona 2012 、p.87 [この本には誤植/誤りがあり、(54)ではなく(45)が示されています。]^ a b スタンレー、リチャード・P. (2012). 列挙的組合せ論:第1巻、第2版 . ケンブリッジ大学出版局. p. 30, Prop 1.3.1. ISBN 978-1-107-01542-5 。^ キタエフ、セルゲイ(2011年) 『順列と単語のパターン 』シュプリンガー・サイエンス&ビジネス・メディア、119頁 。ISBN 978-3-642-17333-2 。^ ビッグス、ノーマン・L.; ホワイト、AT (1979). 順列群と組み合わせ構造 . ケンブリッジ大学出版局. ISBN 978-0-521-22287-7 。^ ディクソン, ジョン・D.; モーティマー, ブライアン (1996). 順列群 . シュプリンガー. ISBN 978-0-387-94599-6 。^ キャメロン、ピーター・J. (1999). 順列群 . ケンブリッジ大学出版局. ISBN 978-0-521-65302-2 。^ Jerrum, M. (1986). 「順列群のコンパクト表現」. J. Algorithms . 7 (1): 60– 78. doi : 10.1016/0196-6774(86)90038-6 . S2CID 18896625 . ^ 「組み合わせと順列」 www.mathsisfun.com . 2020年9月10日 閲覧 。 ^ Weisstein, Eric W. 「Permutation」 . mathworld.wolfram.com . 2020年9月10日 閲覧 。 ^ ウスペンスキー 1937、18 ページ^ チャラランビデス, Ch A. (2002). 列挙的組合せ論 . CRC Press. p. 42. ISBN 978-1-58488-290-9 。^ ブルアルディ 2010 、p. 46、定理2.4.2^ ブルアルディ 2010、47 ページ^ ブルアルディ 2010、39 ページ^ セーガン、ブルース(2001年)、 対称群 (第2版)、シュプリンガー、p.3 ^ ホール 1959、60 ページ^ Slocum, Jerry; Weisstein, Eric W. (1999). 「15 – パズル」 . MathWorld . Wolfram Research, Inc. 2014年 10月4日 閲覧 。 ^ HA Rothe 、 Sammlung combinatorisch-analytischer Abhandlungen 2 (ライプツィヒ、1800)、263–305。 Knuth 1973 、p.で引用14^ フィッシャー, RA; イェーツ, F. (1948) [1938]. 生物学、農業、医学研究のための統計表 (第3版). ロンドン: オリバー&ボイド. pp. 26– 27. OCLC 14222135 . ^ Bacher, A.; Bodini, O.; Hwang, HK; Tsai, TH (2017). 「コイン投げによるランダム順列の生成:古典アルゴリズム、新分析、そして現代実装」(ACM Trans. Algorithms 13(2): 24:1–24:43 ed.)pp. 24– 43. ^ a b Sedgewick, R (1977). 「順列生成法」 (PDF) . Computing Surveys . 9 (2): 137– 164. doi : 10.1145/356689.356692 . S2CID 12139332. 2008年2月21日時点のオリジナルより アーカイブ (PDF) . ^ "std::next_permutation" . cppreference.com . 2017年12月4日. 2018年 3月31日 閲覧 。 ^ Heap, BR (1963). 「Permutations by Interchanges」 . The Computer Journal . 6 (3): 293– 298. doi : 10.1093/comjnl/6.3.293 . ^ Mütze, Torsten; Sawada, Joe; Williams, Aaron. 「Generate permutations」 . Combinatorial Object Server . 2019年 5月29日 閲覧 。 ^ Zaks, S. (1984). 「順列生成のための新しいアルゴリズム」. BIT Numerical Mathematics . 24 (2): 196– 204. doi : 10.1007/BF01937486 . S2CID 30234652 . ^ Sawada, Joe; Williams, Aaron (2018). 「シグマ-タウ問題に対するハミルトン経路」. 第29回ACM-SIAM離散アルゴリズムシンポジウム論文集, SODA 2018. ニューオーリンズ, ルイジアナ州: Society for Industrial and Applied Mathematics (SIAM). pp. 568– 575. doi : 10.1137/1.9781611975031.37 . ^ Corbett, PF (1992). 「ローテータグラフ:ポイントツーポイントマルチプロセッサネットワークのための効率的なトポロジー」. IEEE Transactions on Parallel and Distributed Systems . 3 (5): 622– 626. doi : 10.1109/71.159045 . ^ a b Arndt, Jörg (2011). Matters Computational. Ideas, Algorithms, Source Code . Springer . doi : 10.1007/978-3-642-14764-7 . ISBN 978-3-642-14763-0 。^ Popp, OT (2002). 大きな順列を素早く処理する . priv. comm. ^ 「3GPP TS 36.212」 。 ^ Dolev, Shlomi; Lahiani, Limor; Haviv, Yinnon (2013). 「ユニーク順列ハッシュ」 理論 計算機科学 475 : 59–65 . doi : 10.1016 /j.tcs.2012.12.047 .
参考文献
さらに読む
外部リンク