1. 定義
n個元素的全排列有n!個,如果將排列按順序編號,並能夠按照某種方法建立起每一個序號與一個排列之間的對應關係,那麼就可以根據序號確定排列,反過來也可以根據排列確定它的序號。根據排列的序號生成對應排列的方法就稱爲序數法。
n!=n(n−1)!=[(n−1)+1](n−1)!=(n−1)(n−1)!+(n−1)!
同理可得
(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−1k⋅k!+1
上式減1得
n!−1=(n−1)(n−1)!+(n−2)(n−2)!+⋯+2⋅2!+1⋅1!
可得到0到n!−1的整數m可以唯一地表示爲
m=ak−1(k−1)!+ak−2(k−2)!+⋯+a2⋅2!+a1
其中ai滿足0⩽ai⩽k,i=1,2,⋯,k−1
所以可以證明0到n!−1的n!個整數和序數(an−1,an−2,⋯,a2,a1)一一對應。
2. 序數法生成全排列算法
由排列P1P2P3…Pn對應的序數(an−1an−2…a1)的規則爲:
ai = i+1的右邊比i+1小的數字的個數
-
例1:由排列數確定排列的序號
以1,2,3,4的排列4213爲例,排列4213爲例,排列4213,4的右邊比它小的數有3位,故a3=3;3的右邊比3小的數爲0,故a2=0,2的右方比2小的數爲1,故a1=1,故排列4213對應的序數爲(301)。
-
例2:由排列的序號確定排列數
承接上一個例子,a3=3,故4在排列中所在的位右方小的數有3個,故在排列數中的第一位爲4。a2=0,故3的右方沒有比它小的,故在排列數中的第四位上,以此類推,得到最終的排列數爲4213。
-
例3:n=4的序數(a3a2a1)與對應的排列