首页
题库
面试
求职
学习
竞赛
More+
所有博客
搜索面经/职位/试题/公司
搜索
我要招人
去企业版
登录 / 注册
首页
>
试题广场
>
购票采用什么算法来解决?
[单选题]
绘画展览门票每张5元,如果有2n个人排队购票,每人一张,并且其中一半人恰有5元钱,另一半人恰有10元钱,而票房无
零钱
可找,那么如何将这2n个人排成一列,顺次购票,使得不至于因票房无零钱可找而耽误时间,应该采用什么算法解决呢?()
贪心算法
分支限界法
回溯法
动态规划法
查看答案及解析
添加笔记
求解答(48)
邀请回答
收藏(795)
分享
13个回答
添加回答
68
Pandora
关于五大常用算法,来自
随遇而安随缘一世
的http://blog.csdn.net/lcj_cjfykx/article/details/41691787,值得大概了解。
贪心算法:
在对问题求解时,总是做出在当前看来是最好的选择,有可能陷入局部最优。
分治:
将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之。
动态规划:
将待求解的问题分解为若干个子问题(阶段),按顺序求解子阶段,前一子问题的解,为后一子问题的求解提供了有用的信息。
与分治的区别:
经分解后得到的子问题往往不是互相独立的(即下一个子阶段的求解是建立在上一个子阶段的解的基础上,进行进一步的求解)。
回溯:
在包含问题的所有解的解空间树中,按照
深度优先
搜索的策略,从根结点出发深度探索解空间树。当探索到某一结点时,要先判断该结点是否包含问题的解,如果包含,就从该结点出发继续探索下去,如果该结点不包含问题的解,则逐层向其祖先结点回溯。
分支限界:
采用
广度优先
的策略,在问题的解空间树T上搜索问题解。
与回溯区别:
回溯法的求解目标是找出T中满足约束条件的所有解,而分支限界法的求解目标则是找出满足约束条件的一个解,或是在满足约束条件的解中找出使某一目标函数值达到极大或极小的解,即在某种意义下的最优解。
//////////////////////////////////////////////////////////////////////
至于题目,题意为排队购票,大的调整肯定不行,否则我直接喊所有5块的站前边,10块的站后边,排队的人肯定不乐意。
所以,必须依着本来的排队顺序,一步一步走,即从根结点出发,一步一步判断。就是分支限界的FIFO搜索:
将活节点表组织成一个
队列
,并将队列的先进先出原则,选取下一个节点为当前扩展节点。(其实都不知道自己在说什么)
编辑于 2015-09-21 09:13:39
回复(7)
18
leobuzhi
这个是卡特兰数的经典应用。但是这个问题不是一两句话能说得清的,介绍卡特兰数的文章都用大量的篇幅讲他的原理。这里给你一个类似问题的描述,看看能不能看懂。
问题描述:
12个高矮不同的人,排成两排,每排必须是从矮到高排列,而且第二排比对应的第一排的人高,问排列方式有多少种?
这个笔试题,很YD,因为把某个递推关系隐藏得很深。
问题分析:
我们先把这12个人从低到高排列,然后,选择6个人排在第一排,那么剩下的6个肯定是在第二排.
用0表示对应的人在第一排,用1表示对应的人在第二排,那么含有6个0,6个1的序列,就对应一种方案.
比如000000111111就对应着
第一排:0 1 2 3 4 5
第二排:6 7 8 9 10 11
010101010101就对应着
第一排:0 2 4 6 8 10
第二排:1 3 5 7 9 11
问题转换为,这样的满足条件的01序列有多少个。
观察1的出现,我们考虑这一个出现能不能放在第二排,显然,在这个1之前出现的那些0,1对应的人
要么是在这个1左边,要么是在这个1前面。而肯定要有一个0的,在这个1前面,统计在这个1之前的0和1的个数。
也就是要求,0的个数大于1的个数。
OK,问题已经解决。
如果把0看成入栈操作,1看成出栈操作,就是说给定6个元素,合法的入栈出栈序列有多少个。
这就是catalan数,这里只是用于栈,等价地描述还有,二叉树的枚举、多边形分成三角形的个数、圆括弧插入公式中的方法数,其通项是c(2n, n)/(n+1)。
在<<计算机程序设计艺术>>,第三版,Donald E.Knuth著,苏运霖译,第一卷,508页,给出了证明:
问题大意是用S表示入栈,X表示出栈,那么合法的序列有多少个(S的个数为n)
显然有c(2n, n)个含S,X各n个的序列,剩下的是计算不允许的序列数(它包含正确个数的S和X,但是违背其它条件)。
在任何不允许的序列中,定出使得X的个数超过S的个数的第一个X的位置。然后在导致并包括这个X的部分序列中,以S代替所有的X并以X代表所有的S。结果是一个有(n+1)个S和(n-1)个X的序列。反过来,对一垢一种类型的每个序列,我们都能逆转这个过程,而且找出导致它的前一种类型的不允许序列。例如XXSXSSSXXSSS必然来自SSXSXXXXXSSS。这个对应说明,不允许的序列的个数是c(2n, n-1),因此an = c(2n, n) - c(2n, n-1)。
分支限界法常以广度优先或以最小耗费(最大效益)优先的方式搜索问题的解空间树。
在分支限界法中,每一个活结点只有一次机会成为扩展结点。活结点一旦成为扩展结点,就一次性产生其所有儿子结点。在这些儿子结点中,导致不可行解或导致非最优解的儿子结点被舍弃,其余儿子结点被加入活结点表中。
此后,从活结点表中取下一结点成为当前扩展结点,并重复上述结点扩展过程。这个过程一直持续到找到所需的解或活结点表为空时为止。
然后回到本问题,排队买票的每个人都是不同的,n个人有5元,n个人有10美分,最后结果在乘以A(n,n)*A(n,n),即为“[c(2n, n) - c(2n, n-1)]*A(n,n)*A(n,n)”
如果是填空题填多少种方法就是 (2n)!/[n!(n+1)!]
发表于 2016-02-07 16:38:20
回复(0)
7
小杨vita
题目的意思是只要求得一个可行解就行了,那不就是贪心么,5元钱的全排前面
发表于 2015-09-19 21:31:05
回复(3)
1
LEarBB
题目对应的模型是卡特兰数的典型应用。
发表于 2016-03-22 13:54:51
回复(0)
0
牛客365596060号
大佬,为什么不是“动态规划法”呢
发表于 2021-09-20 20:12:48
回复(0)
0
wbq9224
这题难道不是动态规划?卡塔兰数的递推式就是状态转移方程。当然某种意义上基本上所有的DP问题都可以用搜索去做。
发表于 2018-07-09 23:11:40
回复(0)
0
sponge_wxy
题目只要求求一可行解啊,贪心构造不可以吗?
发表于 2016-08-10 20:09:13
回复(0)
0
牛客143068号
贪心算法:
在对问题求解时,总是做出在当前看来是最好的选择,有可能陷入局部最优。
分治:
将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之。
动态规划:
将待求解的问题分解为若干个子问题(阶段),按顺序求解子阶段,前一子问题的解,为后一子问题的求解提供了有用的信息。
与分治的区别:
经分解后得到的子问题往往不是互相独立的(即下一个子阶段的求解是建立在上一个子阶段的解的基础上,进行进一步的求解)。
回溯:
在包含问题的所有解的解空间树中,按照
深度优先
搜索的策略,从根结点出发深度探索解空间树。当探索到某一结点时,要先判断该结点是否包含问题的解,如果包含,就从该结点出发继续探索下去,如果该结点不包含问题的解,则逐层向其祖先结点回溯。
分支限界:
采用
广度优先
的策略,在问题的解空间树T上搜索问题解。
与回溯区别:
回溯法的求解目标是找出T中满足约束条件的所有解,而分支限界法的求解目标则是找出满足约束条件的一个解,或是在满足约束条件的解中找出使某一目标函数值达到极大或极小的解,即在某种意义下的最优解。
发表于 2016-06-20 15:59:32
回复(0)
0
陈玉龙
贪心算法:在对问题求解时,总是做出在当前看来是最好的选择,有可能陷入局部最优。
分治:将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之。
动态规划:将待求解的问题分解为若干个子问题(阶段),按顺序求解子阶段,前一子问题的解,为后一子问题的求解提供了有用的信息。与分治的区别:经分解后得到的子问题往往不是互相独立的(即下一个子阶段的求解是建立在上一个子阶段的解的基础上,进行进一步的求解)。
回溯:在包含问题的所有解的解空间树中,按照深度优先搜索的策略,从根结点出发深度探索解空间树。当探索到某一结点时,要先判断该结点是否包含问题的解,如果包含,就从该结点出发继续探索下去,如果该结点不包含问题的解,则逐层向其祖先结点回溯。
分支限界:采用广度优先的策略,在问题的解空间树T上搜索问题解。与回溯区别:回溯法的求解目标是找出T中满足约束条件的所有解,而分支限界法的求解目标则是找出满足约束条件的一个解,或是在满足约束条件的解中找出使某一目标函数值达到极大或极小的解,即在某种意义下的最优解。
发表于 2016-05-29 09:31:43
回复(0)
0
SamcYang
画个nn的矩阵 5则横着走 10竖着走 左下角的全部路线就是结果
发表于 2016-03-21 23:39:43
回复(0)
0
codermanFans
贪心算法不能保证最优解。。。
发表于 2015-09-25 17:29:07
回复(0)
0
指上弹兵赵小括
本人选的是贪心算法,感觉贪心算法很容易就能找到一个较好的解。
发表于 2015-09-25 09:26:21
回复(0)
0
mereyct
我也觉的是A,问题是
应该采用什么算法解决呢?
那么如何将这2n个人排成一列!他问你如何进行排列。那我就贪心排列好啦!这么理解没有错吧。
分支限界1L也说了是搜索问题解。也有可能无解吧?并没有解决方案啊,他能进行判断,不能解决方案。抱歉,我的理解是这样的。不知道对不对。
发表于 2015-09-21 20:36:15
回复(0)
这道题你会答吗?花几分钟告诉大家答案吧!
提交观点
问题信息
贪心
动态规划
搜索
来自:
360公司2016研发...
难度:
13条回答
795收藏
16490浏览
热门推荐
相关试题
最大报销额
动态规划
搜索
dfs
评论
(21)
回溯法的含义是指加剪枝...
搜索
评论
(7)
下面使用贪心算法的是?
阿里巴巴
贪心
评论
(1)
有关线程的哪些叙述是对的()
操作系统
评论
(27)
来自
楚楚街2016在线笔试练习卷
近期我国某大学将组织召开一次学术研...
逻辑判断
评论
(2)
扫描二维码,关注牛客网
意见反馈
下载牛客APP,随时随地刷题