康托展开
康托展开
康托展开的实质是计算当前序列在所有从小到大的全排列中的顺序,将全排列与自然数产生一个映射关系。
而全排列的实质就是排列组合问题,那如何求该排列的康拓展开值呢?就是求出该排列字典序列小的序列个数加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
作者:newcode 更多资源请关注纽扣编程微信公众号

从事机器人比赛、机器人等级考试、少儿scratch编程、信息学奥赛等研究学习

浙公网安备 33010602011771号