- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
算法合集之《一猜数问题的研究》
一类猜数问题的研究
长沙市雅礼中学 龙凡
猜数问题
猜数问题是信息学竞赛中一种常见的类似博弈的问题。
基本形式:存在一个被猜数X。每次可以猜一个数Y,之后会返回X和Y的关系,你要利用返回的信息来猜出X。
本文着重讨论的一类猜数问题是:返回的信息是X和Y的大小关系。
基本的猜数问题
下面就是一个本文讨论范畴内的最基本的猜数问题:
被猜数X是1到N范围内的整数,每次你可以询问一个整数Y和X的大小关系。给出N,请问在最坏情况下至少需要几次才能保证猜出X。
上题应用大家熟悉的二分的思想可以轻松解决。
上面我们总共耗费了3次询问。这只是作为一个二分询问的例子。对于此题,应用二分法,作适当的数学分析,就可以得到最少的询问次数为:
基本的猜数问题
设N=7,X=5。应用二分的思想询问:
1
2
3
4
5
6
7
1.询问Y=4
2.得到XY
3.询问Y=6
4.得到XY
5.询问Y=5
6.得到X=Y
问题的提出
作为一类猜数问题中最基本的形式,固然是非常简单的。
但很多其他的问题在这个“基本形式”上进行了一些扩充和加强,就变成了非常棘手的问题。
下面就让我们来实际的看一看这类型的例子:
问题的提出
你和你的同学在网上进行猜数游戏,基本规则和普通的猜数游戏一样。你猜一个数Y,他告诉你,Y和他心中所想的数X的大小关系。你打字速度很快,每1s钟就可以问一个问题。由于网络有延迟的,所以你问的问题不能马上得到回答,而是要经过1s之后才会得到回答。同时你和同学约定,你要尽量避免得到XY的回答。(你可以认为,X是他的考试成绩之类的)当你累计得到第K次XY的回答的时候,你就输了。已知X是1到N之间的整数。现在给出N、K,请问最少要多少秒才能保证猜出X。
问题的提出
下面是一个N=6,K=3时的实例:
询问
回答
时间
1s
2s
3s
4s
5s
上面的询问,总共用了5s。
期间得到了一次XY的回答。K=3没有超过限制。
Y=3
Y=5
Y=4
Y=4
Y=6
X6
X5
X=4
X3
…
初步分析
我们现在的问题并不是如何猜,而是在最坏的情况下至少要多少秒才能猜出X来。
本题沿用二分的老思路是行不通的。
可以看出,虽然仅仅是在基本猜数问题上进行了些许加强,就成了一个非常棘手的问题。
为了解决这个问题,让我们重新从最原始的猜数问题开始分析。
1
2
3
当N=3,K=1并且X=3时。
询问Y=2,必然得到XY回答。
前面我们是通过二分的方法来解决此题的。至于“二分”这个思路的来源,更多的是源自猜测、及平时做题的经验。
下面就来系统的分析为什么“二分”是正确的。
通过分析,希望能找到一个更具有普遍性的方法解决前面的题目。
让我们尝试用递推的方法来分析问题。
被猜数X是1到N范围内的整数,每次你可以询问一个整数Y和X的大小关系。给出N,请问在最坏情况下至少需要几次才能保证猜出X。
再看基本猜数问题
再看基本猜数问题
设f(i)表示i次询问最大能够处理的区间长度。即若N=f(i),则只需要i次就可以猜出X。
根据上面定义,若f(j)≥N。且f(j-1)N则可以知道j即为题目所求的至少询问次数。
每询问一个Y,只可能得到三种不同的回答,我们就从这三种不同的回答入手来分析问题。
再看基本猜数问题
询问一个值Y。
若回答是X=Y,即游戏马上中止。
XY时,为了要在剩下的I-1次询问中得到答案,大于Y的区域长度不能超过f(i-1)。
XY时,小于Y的区域长度不能超过f(i-1)。
Y
小于Y的区域
大于Y的区域
1
f(i-1)
f(i-1)
再看基本猜数问题
上面分析直观的说明了二分的正确性。
f(i)=2f(i-1)+1 = f(i)=2i-1
应用递推的方法间接的证明了前面的结论,即最少询问的次数为:
更重要的是:对于这类试题来说,上面这种应用递推的分析问题的方法具有很强的推广性。
二次分析
通过上面的分析,基本的猜数问题已经完整的解决了。现在回到原题的研究。
现在直接分析原题仍然有点困难,注意到原题相比基本猜数问题有两个加强:
不妨先把这道题目拆开,分部解决。
1.累计获得K次XY的答案就游戏结束。
2.本次的回答要在下一个提问之后获得。
猜数问题的加强
被猜数X是1到N范围内的整数,每次你可以询问一个整数Y和X的大小关系。
附加上条件:累计获得K次XY的答案就游戏结束。
给出N、K,请问在最坏的情况下至少需要几次询问才能保证猜出X。
对于这个问题,可以借鉴前面的经验,应用递推的方法来求解。
被猜数X是1到N范围内的整数,每次你可以询问一个整数Y和X的大小关系。你要尽量避免询问比X小的Y值,因为累计获得K次XY的答案就游戏结束。给出N、K,问在最坏情况下至少需要询问几次才能保证猜出X。
猜数问题的加强
类似的,我们设f(i,j)
文档评论(0)