康托展开

解题思路:解此题需要使用到康托展开,康托展开的公式如下


X=an∗(n−1)!+an−1∗(n−2)!+⋅⋅⋅+ai∗(i−1)!+⋅⋅⋅+a2∗(2−1)!+a1∗(1−1)!


公式看不懂没关系,下面以一个例子来讲解公式的使用!


例如:有一个数组S=["a","b","c","d"],它的其中之一个排列是S1=["b","c","d","a"],现在欲把S1映射成X,需要怎么做呢?按如下步骤走起


X=a4∗3!+a3∗2!+a2∗1!+a1∗0!


1、首先计算n,n等于数组S的长度,n=4


2、再来计算a4=”b”这个元素在数组["b","c","d","a"]中是第几大的元素。”a”是第0大的元素,”b”是第1大的元素,”c”是第2大的元素,”d”是第3大的元素,所以a4=1


3、同样a3=”c”这个元素在数组["c","d","a"]中是第几大的元素。”a”是第0大的元素,”c”是第1大的元素,”d”是第2大的元素,所以a3=1


4、a2=”d”这个元素在数组["d","a"]中是第几大的元素。”a”是第0大的元素,”d”是第1大的元素,所以a2=1


5、a1=”a”这个元素在数组["a"]中是第几大的元素。”a”是第0大的元素,所以a1=0


6、所以X(S1)=1\*3!+1\*2!+1\*1!+0\*0!=9


7、注意所有的计算都是按照从0开始的,如果[“a”,”b”,”c”,”d”]算为第1个的话,那么将X(S1)+1即为最后的结果


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值