1. 定义
n
n
n个元素的全排列有
n
!
n!
n!个,如果将排列按顺序编号,并能够按照某种方法建立起每一个序号与一个排列之间的对应关系,那么就可以根据序号确定排列,反过来也可以根据排列确定它的序号。根据排列的序号生成对应排列的方法就称为序数法。
n
!
=
n
(
n
−
1
)
!
=
[
(
n
−
1
)
+
1
]
(
n
−
1
)
!
=
(
n
−
1
)
(
n
−
1
)
!
+
(
n
−
1
)
!
\begin{aligned} n ! &=n(n-1) !=[(n-1)+1](n-1) ! \\ &=(n-1)(n-1) !+(n-1) ! \end{aligned}
n!=n(n−1)!=[(n−1)+1](n−1)!=(n−1)(n−1)!+(n−1)!
同理可得
(
n
−
1
)
!
=
(
n
−
2
)
(
n
−
2
)
!
+
(
n
−
2
)
!
(n-1) !=(n-2)(n-2) !+(n-2) !
(n−1)!=(n−2)(n−2)!+(n−2)!
代入上式可得
n
!
=
(
n
−
1
)
(
n
−
1
)
!
+
(
n
−
2
)
(
n
−
2
)
!
+
(
n
−
2
)
!
=
(
n
−
1
)
(
n
−
1
)
!
+
(
n
−
2
)
(
n
−
2
)
!
+
(
n
−
3
)
(
n
−
3
)
!
+
⋯
+
2
⋅
2
!
+
2
!
=
∑
k
=
1
n
−
1
k
⋅
k
!
+
1
\begin{aligned} n ! &=(n-1)(n-1) !+(n-2)(n-2) !+(n-2) ! \\ &=(n-1)(n-1) !+(n-2)(n-2) !+(n-3)(n-3) !+\cdots+2 \cdot 2 !+2 ! \\ &=\sum_{k=1}^{n-1} k \cdot k !+1 \end{aligned}
n!=(n−1)(n−1)!+(n−2)(n−2)!+(n−2)!=(n−1)(n−1)!+(n−2)(n−2)!+(n−3)(n−3)!+⋯+2⋅2!+2!=k=1∑n−1k⋅k!+1
上式减1得
n
!
−
1
=
(
n
−
1
)
(
n
−
1
)
!
+
(
n
−
2
)
(
n
−
2
)
!
+
⋯
+
2
⋅
2
!
+
1
⋅
1
!
n !-1=(n-1)(n-1) !+(n-2)(n-2) !+\cdots+2 \cdot 2 !+1 \cdot 1 !
n!−1=(n−1)(n−1)!+(n−2)(n−2)!+⋯+2⋅2!+1⋅1!
可得到
0
0
0到
n
!
−
1
n!-1
n!−1的整数m可以唯一地表示为
m
=
a
k
−
1
(
k
−
1
)
!
+
a
k
−
2
(
k
−
2
)
!
+
⋯
+
a
2
⋅
2
!
+
a
1
m=a_{k-1}(k-1) !+a_{k-2}(k-2) !+\cdots+a_{2} \cdot 2 !+a_{1}
m=ak−1(k−1)!+ak−2(k−2)!+⋯+a2⋅2!+a1
其中
a
i
a_i
ai满足
0
⩽
a
i
⩽
k
,
i
=
1
,
2
,
⋯
 
,
k
−
1
0 \leqslant a_{i} \leqslant k, i=1,2, \cdots, k-1
0⩽ai⩽k,i=1,2,⋯,k−1
所以可以证明
0
0
0到
n
!
−
1
n!-1
n!−1的
n
!
n!
n!个整数和序数
(
a
n
−
1
,
a
n
−
2
,
⋯
 
,
a
2
,
a
1
)
\left(a_{n-1}, a_{n-2}, \cdots, a_{2}, a_{1}\right)
(an−1,an−2,⋯,a2,a1)一一对应。
2. 序数法生成全排列算法
由排列
P
1
P
2
P
3
…
P
n
P_1P_2P_3\dots P_n
P1P2P3…Pn对应的序数
(
a
n
−
1
a
n
−
2
…
a
1
)
(a_{n-1}a_{n-2}\dots a_1)
(an−1an−2…a1)的规则为:
a
i
a_i
ai =
i
+
1
i+1
i+1的右边比
i
+
1
i+1
i+1小的数字的个数
-
例1:由排列数确定排列的序号
以1,2,3,4的排列4213为例,排列4213为例,排列4213,4的右边比它小的数有3位,故 a 3 = 3 a_3=3 a3=3;3的右边比3小的数为0,故 a 2 = 0 a_2=0 a2=0,2的右方比2小的数为1,故 a 1 = 1 a_1=1 a1=1,故排列4213对应的序数为(301)。 -
例2:由排列的序号确定排列数
承接上一个例子, a 3 = 3 a_3 = 3 a3=3,故4在排列中所在的位右方小的数有3个,故在排列数中的第一位为4。 a 2 = 0 a_2=0 a2=0,故3的右方没有比它小的,故在排列数中的第四位上,以此类推,得到最终的排列数为4213。 -
例3: n = 4 n=4 n=4的序数 ( a 3 a 2 a 1 ) (a_3a_2a_1) (a3a2a1)与对应的排列