康托展开

康托展开
康托展开的实质是计算当前序列在所有从小到大的全排列中的顺序,将全排列与自然数产生一个映射关系。
而全排列的实质就是排列组合问题,那如何求该排列的康拓展开值呢?就是求出该排列字典序列小的序列个数加1,那如何求它之前的兄弟的个数呢?
\(X=a_n*(n-1)! + a_{n-1}*(n-2)!+...+a_1 * 0!\)
其中\(a_i\)代表原数的第i位在当前未出现的元素中占第几位(从0开始)

例如:
12345

\(X=a_5*(5-1)!+a_4*(4-1)!+a_3*(3-1)!+a_2*(2-1)!+a_1*(1-1)!\)

\(a_5\)在未出现过数字2345中第几大,1比2345都小,从0开始,所以\(a_5=0\)

\(a_4\)在未出现过数字345中第几大,2比345都小,从0开始,所以\(a_4=0\)

\(a_3\)在未出现过数字45中第几大,3比45都小,从0开始,所以\(a_3=0\)

\(a_2\)在未出现过数字5中第几大,4比5都小,从0开始,所以\(a_2=0\)

\(a_1\)在未出现过数字中第几大,5后面没有,从0开始,所以\(a_1=0\)

所以12345的康托展开值为
\(0 * 4!+0 * 3!+0 * 2!+0 * 1!+0 * 0!=0\)

43152的康托展开的值为
\(3 * 4!+2 * 3!+0 * 2!+1 * 1!+0 * 0!=85\)

51413的康托展开的值为
\(4*4!+1*3!+2*2!=106\)

康托展开
https://www.cnblogs.com/yinyuqin/p/11342460.html
https://www.luogu.com.cn/problem/P5367

posted @ 2022-08-17 15:52  new-code  阅读(84)  评论(0)    收藏  举报