康托展开

Posted perisino

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了康托展开相关的知识,希望对你有一定的参考价值。

按规矩,祭天

今天加了的内容是康托展开,因为时间原因就不附上题目了而且我也还没有做题,就直接来看内容了

定义

它是用来求解一个数列的全排列下面的结果的序号的问题
[ ∑(pi*(n-i)!)(i是第几个数字) ]

逆推过去

那么就是根据序号求结果了,方法是类似的
首先是把1~n-1的阶乘都算出来,然后呢每一位也是倒着回去,用序号整除这里对应的阶乘,然后看看在剩下的没有选的数字当中哪一个的比它小的数字的个数等于这一个结果就行了

比较简洁,大概就是我对此的理解了

最后还有一个逆元的求法

这个求法的推导自己去推,书上也是有的(数学一本通P17)
那么我就附上一份代码就行了

int inv(int n,int p){
    if(n==1)return 1;
    else return -(p/i)*inv(p%n,p);
}

到此为止了。

以上是关于康托展开的主要内容,如果未能解决你的问题,请参考以下文章

全排列的编码与解码——康托展开 (附完整代码)

康托展开 / 逆康托展开

康托展开 & 逆康托展开

康托展开小结-

LG5367 「模板」康托展开 康托展开

[学习][Math]康托展开和逆康托展开