导学_康托展开

文章讲述了通过康托展开解决全排列次序问题的方法,以及如何进行康托展开的逆运算来找出特定排列。德川向田所解释了康托展开的原理和应用,帮助他理解并解决了数学题。此外,文章还提出了3x3棋盘的移动问题,强调寻找最少步骤的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

知·识·概·要

【解不开的数学题】

今天,田所浩二在刷数学题的时候,遇到了一道不会的题(悲)。他决定请教好朋友德川,毕竟德川可事下北泽师范大学博士毕业的高材生(喜)。
26岁的德川一眼看出田所的心思,便想看看事什么样的题能难住24岁的田所。
德川一看,只见试卷上写着几行字:

请问在5的全排列中,34152的次序事多少?

德川低着头思考了一会,然后转身对田所说:“这道题,需要用到康托展开。”
24岁的田所听了,十分甚至九分的不理解:什么事康托展开啊?(悲)

【康托展开】

德川看田所没学过康托展开,想给田所好好地讲一番(意味深)。
康托展开事一种用来求全排列次序的方法,当求全排列最短路径问题的程序中,如果全排列的数据过多,就会导致visited数组过大浪费空间,因此我们需要采用康托展开的方法来节省空间。
比如求34152的全排列次序。

第一位数字32个比它小的数,3后面有4个数字,由此得出2×4!=482\times4!=482×4!=48
第二位数字43个比它小的数,但由于3被访问过,所以只有2个比它小且未被访问的数。4后面有3个数字,由此得出2×3!=122\times3!=122×3!=12
第三位数字10个比它小的数,1后面有2个数字,由此得出0×2!=00\times2!=00×2!=0
第四位数字54个比它小的数,但由于134都被访问过,所以只有1个比它小且未被访问的数。5后面有1个数字,由此得出1×1!=11\times1!=11×1!=1
第五位数字21个比它小的数,但由于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=1145131145141=114513
第一位,114513÷8!=2…33873114513\div8!=2\dots33873114513÷8!=233873,有2个数比它小且未被访问过的数事3
第二位,33873÷7!=6…363333873\div7!=6\dots363333873÷7!=63633,有6个数比它小且未被访问过的数事8
第三位,3633÷6!=5…333633\div6!=5\dots333633÷6!=533,有5个数比它小且未被访问过的数事7
第四位,33÷5!=0…3333\div5!=0\dots3333÷5!=033,有0个数比它小且未被访问过的数事1
第五位,33÷4!=1…933\div4!=1\dots933÷4!=19,有1个数比它小且未被访问过的数事4
第六位,9÷3!=1…39\div3!=1\dots39÷3!=13,有1个数比它小且未被访问过的数事5
第七位,3÷2!=1…13\div2!=1\dots13÷2!=11,有1个数比它小且未被访问过的数事6
第八位,1÷1!=1…01\div1!=1\dots01÷1!=10,有1个数比它小且未被访问过的数事9
最后一位只能填2
所以这个排列事387145692

田所听了很事感激,不仅做出了一个一个一个一个数学题,还学会了康托展开和它的逆运算。他向德川深深地鞠了一躬,全剧终。

课·后·练·习

【题目描述】

3×3的棋盘上,摆有八个棋子,每个棋子上标有18的某一数字。棋盘中留有一个空格,空格用0来表示。空格周围的棋子可以移到空格中。要求解的问题是:给出一种初始布局(初始状态)和目标布局,为了使题目简单, 设目标状态为

1 2 3 
8 0 4 
7 6 5 

找到一种最少步骤的移动方法,实现从初始布局到目标布局的转变。

【输入描述】

三行,每行三个整数,表示方阵的开始状态

【输出描述】

只有一行,该行只有一个数字,表示从初始状态到目标状态需要的最少移动次数,若在5000步内无解,则输出-1

【输入样例】

1 2 3
8 4 0
7 6 5

【输出样例】

1

那么本期导学就到这里,压力马斯内!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值