x=a[n](n-1)!+a[n-1](n-2)!+…+a[i]*(i-1)!+…+a[1]*0! ,其中a[i]為當前未出現的元素中是排在第幾個(從0開始)。這就是康托展開。
公式把乙個整數x展開成如下形式:
x=a[n](n-1)!+a[n-1](n-2)!+…+a[i]*(i-1)!+…+a[2]*1!+a[1]*0!
其中a[i]為』『當前元素』『在』『所有未出現的元素』'中排在第i個(從0開始),並且0<=a[i]摺疊例項2
表示1,2,3,…,n的排列如 按從小到大排列一共6個。123 132 213 231 312 321 。
代表的數字 1 2 3 4 5 6 也就是把10進製數與乙個排列對應起來。
他們間的對應關係可由康托展開來找到。
如我想知道321是中第幾個小的數可以這樣考慮 :
第一位是3,當第一位的數小於3時,那排列數小於321 如 123、 213 ,小於3的數有1、2 。所以有22!個。再看小於第二位2的:小於2的數只有乙個就是1 ,所以有11!=1 所以小於321的排列數有22!+11!=5個。所以321是第6個小的數。 22!+11!+0*0!就是康托展開。
再舉個例子:1324是排列數中第幾個大的數:第一位是1小於1的數沒有,是0個 03! 第二位是3小於3的數有1和2,但1已經在第一位了,所以只有乙個數2 12! 。第三位是2小於2的數是1,但1在第一位,所以有0個數 01! ,所以比1324小的排列有03!+12!+01!=2個,1324是第三個小數。
具體題目可以參考洛谷p2525
康拓展開 康拓逆展開
康拓展開 已知有一集合a包含n個不同的元素,其中 k1,k2,k3.kn 2 是a的乙個排列。假設此排列為a按字典序從小到大排列的排列中的第x個排列,則x a1 n 1 a2 n 2 an 2 1 an 1 0 其中ai為ki 1.kn中比ki小的數的個數 例如 3214是1234的第2 3 1 2...
康拓展開與逆康拓展開
首先解釋一下,所謂的康拓展開,就是能夠通過乙個式子,得到乙個排列在所有排列中的按字典序排好後的位次。而逆康托展開,則是給出排列的位次,能夠計算出排列是什麼。下面先給出康拓展開的公式 其中ai 為整數,並且 0 ai ai表示原數的第 i位在當前未出現的元素中是排在第幾個 康拓展開是乙個雙射,因此常用...
康拓展開與康拓展開的逆
康拓展開一般是用於計算乙個全排列數字排在所有全排列的大小位置。那麼到底怎麼計算呢?敲重點 x a n n 1 a n 1 n 2 a i i 1 a 2 1 a 1 0 1 從第乙個數字開始到倒數第二個數字,計算需要計算的那個數字之後比這個數小的數字有幾個,再乘以 n x n是全排列的 數字,x是當...