知·识·概·要
【解不开的数学题】
今天,田所浩二在刷数学题的时候,遇到了一道不会的题(悲)。他决定请教好朋友德川,毕竟德川可事下北泽师范大学博士毕业的高材生(喜)。
26
岁的德川一眼看出田所的心思,便想看看事什么样的题能难住24
岁的田所。
德川一看,只见试卷上写着几行字:
请问在
5
的全排列中,34152
的次序事多少?
德川低着头思考了一会,然后转身对田所说:“这道题,需要用到康托展开。”
24
岁的田所听了,十分甚至九分的不理解:什么事康托展开啊?(悲)
【康托展开】
德川看田所没学过康托展开,想给田所好好地讲一番(意味深)。
康托展开事一种用来求全排列次序的方法,当求全排列最短路径问题的程序中,如果全排列的数据过多,就会导致visited
数组过大浪费空间,因此我们需要采用康托展开的方法来节省空间。
比如求34152
的全排列次序。
第一位数字
3
有2
个比它小的数,3
后面有4
个数字,由此得出2×4!=482\times4!=482×4!=48;
第二位数字4
有3
个比它小的数,但由于3
被访问过,所以只有2
个比它小且未被访问的数。4
后面有3
个数字,由此得出2×3!=122\times3!=122×3!=12;
第三位数字1
有0
个比它小的数,1
后面有2
个数字,由此得出0×2!=00\times2!=00×2!=0;
第四位数字5
有4
个比它小的数,但由于1
、3
、4
都被访问过,所以只有1
个比它小且未被访问的数。5
后面有1
个数字,由此得出1×1!=11\times1!=11×1!=1;
第五位数字2
有1
个比它小的数,但由于1
被访问过,所以有0
个比它小且未被访问的数。2
后面有0
个数字,由此得出0×0!=00\times0!=00×0!=0;
把这些数字加起来再加上1
,得出34152
的全排列次序事48+12+0+1+0+1=6248+12+0+1+0+1=6248+12+0+1+0+1=62。
【康托展开逆运算】
田所看了很久,终于明白应该怎么求力!(喜)但只听德川轻轻地说:“会了康托展开,还要会它的逆运算。”说着,德川给田所出了道题:
一个排序在
9
的全排列中次序数为114514
,求这个排列。
田所想来想去,也想不出来一个办法。德川知道他没有思路后,便向他讲了这道题。
首先,114514−1=114513114514-1=114513114514−1=114513;
第一位,114513÷8!=2…33873114513\div8!=2\dots33873114513÷8!=2…33873,有2
个数比它小且未被访问过的数事3
;
第二位,33873÷7!=6…363333873\div7!=6\dots363333873÷7!=6…3633,有6
个数比它小且未被访问过的数事8
;
第三位,3633÷6!=5…333633\div6!=5\dots333633÷6!=5…33,有5
个数比它小且未被访问过的数事7
;
第四位,33÷5!=0…3333\div5!=0\dots3333÷5!=0…33,有0
个数比它小且未被访问过的数事1
;
第五位,33÷4!=1…933\div4!=1\dots933÷4!=1…9,有1
个数比它小且未被访问过的数事4
;
第六位,9÷3!=1…39\div3!=1\dots39÷3!=1…3,有1
个数比它小且未被访问过的数事5
;
第七位,3÷2!=1…13\div2!=1\dots13÷2!=1…1,有1
个数比它小且未被访问过的数事6
;
第八位,1÷1!=1…01\div1!=1\dots01÷1!=1…0,有1
个数比它小且未被访问过的数事9
;
最后一位只能填2
。
所以这个排列事387145692
。
田所听了很事感激,不仅做出了一个一个一个一个数学题,还学会了康托展开和它的逆运算。他向德川深深地鞠了一躬,全剧终。
课·后·练·习
【题目描述】
在3
×3
的棋盘上,摆有八个棋子,每个棋子上标有1
至8
的某一数字。棋盘中留有一个空格,空格用0
来表示。空格周围的棋子可以移到空格中。要求解的问题是:给出一种初始布局(初始状态)和目标布局,为了使题目简单, 设目标状态为
1 2 3
8 0 4
7 6 5
找到一种最少步骤的移动方法,实现从初始布局到目标布局的转变。
【输入描述】
三行,每行三个整数,表示方阵的开始状态
【输出描述】
只有一行,该行只有一个数字,表示从初始状态到目标状态需要的最少移动次数,若在5000
步内无解,则输出-1
【输入样例】
1 2 3
8 4 0
7 6 5
【输出样例】
1
那么本期导学就到这里,压力马斯内!!!