所谓的阿里巴巴的一道递归排序的考题

有这样一个题,貌似是阿里巴巴的笔试题?

 

提:12个高矮不一的人排成两排。要求:

1)每排从矮到高排

2)第二排的比第一排对应位置的人要高。

问:有多少种组合方式?

/

 分析:

       这是一个排列组合题,我们假设1~12是这12位置的编号。

第二排:     7 8 9 10 11 12

第一排:     1 2 3  4   5   6,位置2的人比位置1的人要高,但比位置8的人要矮,和位置7的人的高矮关系不定,以此类推。

可以这样考虑:这12人按从低到高站队,没人发一个编号,然后按此编号去站队,符合条件的编号发放组合就是答案。

 

下面解答:

1)首先可以确定最矮的和最高的人的编号一定是1和12,每种组合都是这样(可推理)。然后让拿到1,12,7,8,9,10,11编号的7人按从低到高排,肯定是 1 7 8 9 10 11 12这个顺序。

2)接下来确定2 3 4 5 6 五人的高低关系。首先高低关系肯定是 2 3 4 5 6,然后:

     2比1高,比8低,则可排在1和8间,有两个位置,1-7,7-8,

     3比2高,比9低,则可排在1和9间,有三个位置,1-7,7-8,8-9,但必须排在2后,这样,如下:

     1  7  8  9  10  11  12

2     ^  ^ 

3     ^  ^ ^

4     ^  ^ ^ ^

5     ^  ^ ^ ^   ^

6     ^  ^ ^ ^   ^    ^

^代表该编号可插入的位置。比如都可以插在1-7,要注意2 3 4 5 6的先后顺序是确定的。

3)计算

   

     1      7      8      9      10      11      12

2     ^1    ^1 

    我们加个数字代表这种插入方式的数量

再看:

     1      7      8      9      10      11      12

2     ^1    ^1 

3     ^1    ^2    ^2

 

当 n = 3 时,1-7的方式只有一种,即当2也插在1-7,因为2要插在7-8的话3就不可能插在1-7了。

                    7-8的方式有两种,2插在1-7,或者2插在7-8,

                    8-9的方式有两种,2插在1-7,或者2插在7-8,

插入方式数量Xn(0) =1 ;

                  Xn(k) = Xn-1(0)+Xn-1(1)+...+Xn-1(k); (k>0)

            也即Xn(k) = Xn(k-1)+Xn-1(k);(k>0)

是递归的过程,由此我们得:

     1      7      8      9      10      11      12

2     ^1    ^1 

3     ^1    ^2    ^2

4     ^1    ^3    ^5    ^5

5     ^1    ^4    ^9    ^14   ^14

6     ^1    ^5    ^14  ^28   ^42   ^42

 

故问题的答案Y6 = X6(0)+X6(1)+...+X6(5) = 132

 

在编码实现的时候用递归还是顺序计算,要看需求。递归会出现重复计算,但是单个计算每次内存开销较小。顺序往下先算出各个元素的值,无需重复,以空间换时间。最好的方法是我们可以存储一部分元素值,比如第一列和第二列的值都很有规律,Xn(0) = 1, Xn(1) = n-1会使计算更快。同时内存占用也不会过大。在递归里可以判断Xn(k),k=0 => Xn(k) = 1,k=1 =>Xn(k) = n-1;

另外,当k>n-1时,Xn(k) = 0,即右上角的元素。

 

当然,在实际使用时,可以设置检查点,比如要算n=1002时,如果有n=1000的检查点可查,那么n=1002的计算就唾手可得了。

weixin073智慧旅游平台开发微信小程序+ssm后端毕业源码案例设计 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
python017基于Python贫困生资助管理系统带vue前后端分离毕业源码案例设计 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
weixin102旅游社交微信小程序+ssm后端毕业源码案例设计 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值