階乗法

組合せ論において階乗数法(または階乗基数法)は、順列の番号付けに適した混合 基数数法である。階乗は基数としてではなく、桁の位の値として機能するため、階乗基数とも呼ばれる。n !未満の数を階乗表現に変換すると、n桁のシーケンスが得られ、これをレーマー符号として使用するか、反転[1]表現として使用することで、 n要素の順列に簡単に変換できる。前者の場合、結果として得られる整数からn要素の順列への写像は、それらを辞書式順序でリストする。一般的な混合基数システムは、ゲオルク・カントール[2]によって研究された

「階乗数システム」という用語はクヌースによって使用されており[3]フランス語の同義語である「numération factorielle」は1888年に初めて使用されました[4]。「factoradic」という用語は階乗と混合基数を組み合わせた造語で、より新しい時代のようです[5] 。

意味

階乗は混合基数記 数法です。右から i番目の桁の基数はiです。つまり、その桁はiより小さくなければなりません。また、(下位の桁の基数を考慮して)その値は( i  − 1) !(その位の値)倍されます。

基数/底87654321
位取り7!6個!5つ!4つ!3つ!2個!1!0!
小数点以下の桁数5040720120246211
最大桁数76543210

このことから、右端の桁は常に0、2番目の桁は0または1、3番目の桁は0、1、または2、というように続くことがわかります(OEISのシーケンスA124252)。階乗数法では、0! は常に0となるため、0! の桁を省略して定義されることもあります(OEISのシーケンスA007623)。

この記事では、階乗の表現は下付き文字「!」で示します。また、いくつかの例では、数字がコロンで区切られています。例えば、3:4:1:0:1:0 !は 、

= 3×5! + 4×4! + 1×3! + 0×2! + 1×1! + 0×0! 
= ((((3×5 + 4)×4 + 1)×3 + 0)×2 + 1)×1 + 0
= 463 10 .

(位の値は基数位置より 1 少ない階乗です。そのため、6 桁の階乗数では式は 5! で始まります。)

混合基数体系の一般的な性質は、階乗数体系にも当てはまります。例えば、ある数を基数(1、2、3、…)で繰り返し割り、その余りを数字として、その商が0になるまで繰り返していくことで、右から左へ数字を生成する階乗表現に変換できます

たとえば、463 10は、次の連続した割り算によって階乗表現に変換できます。

463÷1 = 463、余り0
463÷2=231、余り1
231÷3 = 77、余り0
77÷4=19、余り1
19÷5=3、余り4
3 ÷ 6 = 0、余り 3

商がゼロになると処理は終了します。余りを逆順に読むと、3:4:1:0:1:0 !となります。

原理的には、この体系は有理数を表すために拡張できますが、定義されていない位取り値 (-1)!、(-2)! などを自然に拡張するのではなく、点の後の基数値n = 0、1、2、3、4 などを対称的に選択することができます。この場合も、0 と 1 の位は常にゼロであるため省略できます。したがって、対応する位取り値は 1/1、1/1、1/2、1/6、1/24、...、1/ n ! などとなります。

以下のソート可能な表は、異なる反転関連ベクトルを持つ4つの要素の24通りの順列を示しています。左反転数と右反転数後者はしばしばLehmerコードと呼ばれる)は、特に階乗数として解釈するのに適しています。は順列の逆コレクシコグラフィー順(この表のデフォルトの順序)における位置を示し、後者は辞書式順序(どちらも0から数える)における位置を示します。

右側に省略可能な0がある列でソートすると、その列の階乗数は左側の固定列のインデックス番号と対応します。小さな列は隣接する列の反転であり、これらを使用してコレクシコグラフィック順に並べることができます。右端の列には、階乗数の桁和(表のデフォルト順序ではOEIS : A034968)が表示されます。

与えられた長さの階乗は、ビット関係で順序付けられると順列面体を形成します。これらは、4 つの要素の順列の正しい反転カウント (別名、Lehmer コード) です。

0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
ピービー#
012344321000 00 000000 00 000000 00 0000
121344312100 00 001001 00 100100 00 0011
213244231010 00 010010 00 010010 00 0101
331244213110 00 011011 00 110200 00 0022
423144132200 00 002020 00 020110 00 0112
532144123210 00 012021 00 120210 00 0123
612433421001 00 100100 00 001001 00 1001
721433412101 00 101101 00 101101 00 1012
814233241011 00 110110 00 011020 00 0202
941233214111 00 111111 00 111300 00 0033
1024133142201 00 102120 00 021120 00 0213
1142133124211 00 112121 00 121310 00 0134
1213422431020 00 020200 00 002011 00 1102
1331422413120 00 021201 00 102201 00 1023
1414322341021 00 120210 00 012021 00 1203
1541322314121 00 121211 00 112301 00 1034
1634122143220 00 022220 00 022220 00 0224
1743122134221 00 122221 00 122320 00 0235
1823411432300 00 003300 00 003111 00 1113
1932411423310 00 013301 00 103211 00 1124
2024311342301 00 103310 00 013121 00 1214
2142311324311 00 113311 00 113311 00 1135
2234211243320 00 023320 00 023221 00 1225
2343211234321 00 123321 00 123321 00 1236

別の例として、6桁で表せる最大の数字は543210です。これは10進数では719になります

5×5! +4×4! +3x3! +2×2! +1×1! +0×0!。

明らかに、5:4:3:2:1:0 !の次の階乗表現は1:0:0:0:0:0:0 !であり、これは 6! = 720 10、つまり基数7の位の値を表します。したがって、前者の数と、上記のその合計式は、次の式に等しくなります。

6! − 1。

階乗法は、使用される「桁」に一定の制限を設けた上で、各自然数を一意に表現します。連続する階乗にその指数を掛け合わせた和は常に次の階乗から1を引いた値となるため、いかなる数も複数の方法で表現することはできません。

これは数学的帰納法で簡単に証明できます。または、単に次のことに気付くだけで証明できます。後続の項は互いに打ち消し合い、最初の項と最後の項が残ります (テレスコーピング級数を参照)。

ただし、アラビア数字を使用して数字を表記する場合 (上記の例のように下付き文字を含めない場合)、9 より大きい「桁」を持つ数値については、それらの単純な連結があいまいになります。その最も小さい例は、数値 10 × 10! = 36,288,000 10で、これは A0000000000 ! =10:0:0:0:0:0:0:0:0:0:0:0 !と表記できますが、 100000000000 ! = 1:0:0:0:0:0:0:0:0:0:0:0:0 !とは表記できず、これは 11! = 39,916,800 10を表します。したがって、他の基数Nと同様に文字 A から Z を使って数字 10、11、12、...、35 を表すと、表現可能な最大の数は 36 × 36! − 1 になります。任意の大きな数の場合は、個々の数字を表す基数、たとえば 10 進数を選択し、それらの間に区切り記号を付ける必要があります (たとえば、各数字に、同じく 10 進数で表された基数を添え字として付けます (2 4 0 3 1 2 0 1のように、この数は 2:0:1:0 !と表記することもできます)。実際、階乗数自体は、有限の記号アルファベットのみを使用してすべての自然数を表現できるという意味で、真の数値システムではありません。

順列

整数0, 1, ...,  n ! − 1(あるいは階乗表現におけるn桁の数)と、 n個の要素を辞書式順序で並べた順列の間には、整数が階乗形式で表現されるとき、自然な写像が存在する。この写像はレーマー符号(あるいは反転表)と呼ばれている。例えば、n  = 3のとき、このような写像は次のようになる。

小数点因数分解順列
0 100:0:0 !(0,1,2)
1 100:1:0 !(0,2,1)
2 101:0:0 !(1,0,2)
3 101:1:0 !(1,2,0)
4 102:0:0 !(2,0,1)
5 102:1:0 !(2,1,0)

いずれの場合も、順列の計算は、左端の因数分解桁(ここでは0、1、または2)を最初の順列桁として用い、それを選択肢リスト(0、1、2)から削除することで進められます。この新しい選択肢リストは0でインデックス付けされていると考え、次の因数分解桁をそれぞれ用いて残りの要素を選択します。2番目の因数分解桁が「0」の場合、リストの最初の要素が2番目の順列桁として選択され、リストから削除されます。同様に、2番目の因数分解桁が「1」の場合、2番目の要素が選択され、リストから削除されます。最後の因数分解桁は常に「0」であり、リストには要素が1つだけ含まれているため、これが最後の順列桁として選択されます。

もう少し長い例を挙げると、このプロセスがより明確になるかもしれません。0から6までの数字の2982番目の順列を求めるとします。2982という数字は、因数分解では4:0:4:1:0:0:0 !となり、この数字は、減少する数字の集合にインデックスを付け、各順番にその集合から各数字を取り出すことで、順番に数字 (4,0,6,2,1,3,5) を取り出します。

 4:0:4:1:0:0:0 ! ─► (4,0,6,2,1,3,5)因数分解: 4 : 0 : 4 : 1 : 0 : 0 : 0 ! ├─┬─┬─┬─┐ │ ├─┬─┬─┬─┐ ├─┐ │ │ │セット: (0,1,2,3,4,5,6) ─► (0,1,2,3,5,6) ─► (1,2,3,5,6) ─► (1,2,3,5) ─► (1,3,5) ─► (3,5) ─► (5) │ │ │ │ │ │ │順列: (4, 0, 6, 2, 1, 3, 5)

2 つの順列群直積の自然インデックスは、2 つの下付き文字「!」を持つ 2 つの因数分解数の連結です。

 連結された 小数因数分解順列ペア 0 10 0:0:0 ! 0:0:0 ! ((0,1,2),(0,1,2)) 1 10 0:0:0 ! 0:1:0 ! ((0,1,2),(0,2,1)) ... 5 10 0:0:0 ! 2:1:0 ! ((0,1,2),(2,1,0)) 6 10 0:1:0 ! 0:0:0 ! ((0,2,1),(0,1,2)) 7 10 0:1:0 ! 0:1:0 ! ((0,2,1),(0,2,1)) ... 22 10 1:1:0 ! 2:0:0 ! ((1,2,0),(2,0,1)) ... 34 10 2:1:0 ! 2:0:0 ! ((2,1,0),(2,0,1)) 35 10 2:1:0 ! 2:1:0 ! ((2,1,0),(2,1,0))

小数値

正と負の整数nの両方に対して位取りがn基数となる単一基数システムとは異なり、階乗の基数は負の位取りに拡張できません。負の位取りは (−1)!、(−2)! などとなり、これらの値は未定義です (階乗を参照)。

したがって、1 つの拡張として、常にゼロとなる 1/0! と 1/1! の箇所を省略して、代わりに 1/0!、1/1!、1/2!、1/3!、...、1/ n ! などを使用することもできます。

この方法を用いると、すべての有理数は、その「桁数」が表される有理数の分母の長さ以下となるような、終端展開を持つことになります。これは、任意の整数に階乗が存在し、したがって分母がそれ自身の階乗に割り切れる(たとえそれより小さな階乗に割り切れなくても)ことを考慮すれば証明できます。

したがって、必然的に、素数の逆数の階乗展開は、その素数の長さと正確に同じ長さ(1/1! の位が省略されている場合は1短い)を持つ。その他の項は、OEIS の A046021 列で与えられる。また、分母が素数である有理数の表現における最後の「桁」または項は、分子と素数の差に等しいことも証明できる。

10進法で4の割り切れるかどうかを調べるのに最後の2桁だけを見れば済むのと同様に、階乗数法では、任意の数の割り切れるかどうかを調べるのに有限個の桁だけを見れば済みます。つまり、階乗数法では、それぞれの数に割り切れる規則があるということです。

また、すべての有理数には、小数で 0.24999... = 0.25 = 1/4 や0.999... = 1などであるという事実に似た、終了しない等価物も存在します。これは、最後の項を 1 減らし、残りの無限個の項をその位置の基数で可能な最大の値で埋めることで作成できます。

以下の例では、位取りを区切るためにスペースが使われており、それ以外は小数で表記されています。左側の有理数も小数で表記されています。

この方法でパターン化された表現を持つ定数もいくつかあります。

参照

参考文献

  1. ^ Knuth, DE (1973)、「第3巻 ソートと検索」、The Art of Computer Programming、Addison-Wesley、p. 12、ISBN 0-201-89685-0
  2. ^ Cantor, G. (1869)、Zeitschrift für Mathematik und Physik、vol. 14
  3. ^ Knuth, DE (1997)、「第2巻:半数値アルゴリズム」、The Art of Computer Programming(第3版)、Addison-Wesley、p. 192、ISBN 0-201-89684-2
  4. ^ Laisant、Charles-Ange ( 1888)、「Sur la numérationactorielle、application aux permutations」、Bulletin de la Société Mathématique de France (フランス語)、16 : 176–183
  5. ^ 「factoradic」という用語は、McCaffrey, James (2003)「.NETでの順列の使用によるシステムセキュリティの向上」(Microsoft Developer Network)で紹介されているようです。
  • Mantaci, Roberto; Rakotondrajao, Fanja (2001)、「オイラー的意味を認識する順列表現」(PDF)Discrete Mathematics and Theoretical Computer Science4 : 101– 108、2011年5月24日時点のオリジナル(PDF)からアーカイブ、 2005年3月27日取得
  • Arndt, Jörg (2010). Matters Computational: Ideas, Algorithms, Source Code. pp.  232– 238.
  • Lehmer コード計算機 順列の数字は 1 から始まるので、このページの結果と同等の結果を得るには、すべての順列の数字を頭の中で 1 ずつ減らす必要があります。
  • 階乗法
Retrieved from "https://en.wikipedia.org/w/index.php?title=Factorial_number_system&oldid=1309641022"