龙凡 一类猜数问题的研究.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
龙凡 一类猜数问题的研究

一类猜数问题的研究 长沙市雅礼中学 龙凡 猜数问题 猜数问题是信息学竞赛中一种常见的类似博弈的问题。 基本形式:存在一个被猜数X。每次可以猜一个数Y,之后会返回X和Y的关系,你要利用返回的信息来猜出X。 本文着重讨论的一类猜数问题是:返回的信息是X和Y的大小关系。 基本的猜数问题 下面就是一个本文讨论范畴内的最基本的猜数问题: 被猜数X是1到N范围内的整数,每次你可以询问一个整数Y和X的大小关系。给出N,请问在最坏情况下至少需要几次才能保证猜出X。 上题应用大家熟悉的二分的思想可以轻松解决。 基本的猜数问题 设N=7,X=5。应用二分的思想询问: 问题的提出 作为一类猜数问题中最基本的形式,固然是非常简单的。 但很多其他的问题在这个“基本形式”上进行了一些扩充和加强,就变成了非常棘手的问题。 下面就让我们来实际的看一看这类型的例子: 问题的提出 你和你的同学在网上进行猜数游戏,基本规则和普通的猜数游戏一样。你猜一个数Y,他告诉你,Y和他心中所想的数X的大小关系。你打字速度很快,每1s钟就可以问一个问题。由于网络有延迟的,所以你问的问题不能马上得到回答,而是要经过1s之后才会得到回答。同时你和同学约定,你要尽量避免得到XY的回答。(你可以认为,X是他的考试成绩之类的?)当你累计得到第K次XY的回答的时候,你就输了。已知X是1到N之间的整数。现在给出N、K,请问最少要多少秒才能保证猜出X。 问题的提出 下面是一个N=6,K=3时的实例: 初步分析 我们现在的问题并不是如何猜,而是在最坏的情况下至少要多少秒才能猜出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)。 再看基本猜数问题 上面分析直观的说明了二分的正确性。 f(i)=2f(i-1)+1 = f(i)=2i-1 应用递推的方法间接的证明了前面的结论,即最少询问的次数为: 更重要的是:对于这类试题来说,上面这种应用递推的分析问题的方法具有很强的推广性。 二次分析 通过上面的分析,基本的猜数问题已经完整的解决了。现在回到原题的研究。 现在直接分析原题仍然有点困难,注意到原题相比基本猜数问题有两个加强: 不妨先把这道题目拆开,分部解决。 猜数问题的加强 被猜数X是1到N范围内的整数,每次你可以询问一个整数Y和X的大小关系。 附加上条件:累计获得K次XY的答案就游戏结束。 给出N、K,请问在最坏的情况下至少需要几次询问才能保证猜出X。 对于这个问题,可以借鉴前面的经验,应用递推的方法来求解。 猜数问题的加强 类似的,我们设f(i,j)表示用i次询问,在累计j次XY的回答就游戏结束的情况下,最大能处理的区间长度。 如果我们能够快速求出f,问题也就容易解决了。找到最小的数Ans,满足f(Ans,k)≥N,f(Ans-1,K)N。则答案就为Ans。 和上一题类似,可以根据三种不同的回答,即:X=Y,XY,XY分别进行讨论来构造递推公式。 猜数问题的加强 X=Y的情况最简单,长度为1。 回答为XY,还剩下i-1次机会询问,所以小于Y的区域长度最多为f(i-1,j)。 回答为XY,还剩下i-1次机会询问,并且我们得到了一次“XY”的回答,所以j值减少1,大于Y的区域长度最多为f(i-1,j-1)。 猜数问题的加强 根据这个递推式,依次将f全部计算出来,直到存在一个f(Ans,k)≥N,就结束。所以总时间复杂度为O(AnsK)。 这样此题就被我们解决了。但是如果我们不是要求询问次数,而是希望得到每一步询问的策略,该怎么办呢? 为了让大家深入理解递推算法,我们在这里做进一步分析。 猜数问题的加强 仔细看上图。事实上询问的值Y已经提示出来了,Y是第f(i-1,j)+1个可能值。 在还剩下i次询问,并累计j次X

文档评论(0)

zsmfjh + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档