一个简单的问题,看用数学如果描述

duxianghe 2008-03-07 12:55:25

让你猜一个大于等于0的数字。
给定一个范围,如150-170,如果你猜的数字在这个范围内,就算猜正确了。
如果不在这个范围内,只会告诉你,你猜的数字是大了还是小了。
然后你再继续猜。。。
假设猜的第一个数字为0,即从0开始猜。

要求你用一个数学方法或模型能尽可能快的猜中数字。

请描述一下这个模型所用到的理论。
...全文
131 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
ProjectDD 2008-03-08
  • 打赏
  • 举报
回复
但也可能需要策略
例如

如果给定一个较小的数比如2,如果你的程序一开始就想去确定上界

那么你将会比较吃亏些,可以按2^x(x=0,1,2,3...)这样来猜

但这种策略如果遇到正相反的情况也一样,会做很多无用功'

也许粗看也找不到什么更好的办法
euroman 2008-03-08
  • 打赏
  • 举报
回复
以后问问题先确定你的数据类型
JiangHongTao 2008-03-07
  • 打赏
  • 举报
回复
排序中的2分法搜索。
tailzhou 2008-03-07
  • 打赏
  • 举报
回复
可以从0,1,2,4,8,....,2^k....依次猜,直到猜2^i提示大的时候,那么可以确定肯定在2^(i-1)与2^i之间;
确定范围后,在范围内二分查找;

这样总的复杂度可以控制在o(longN);
i_coding 2008-03-07
  • 打赏
  • 举报
回复
第一步:先从0开始猜,一般来说程序肯定是告诉你猜小了。
第二步:尽量猜一个较大的数字max(也不宜过大),这时候程序告诉你猜大了。
第三步:进行折半猜测,也就是猜max/2这个数,看是大了还是小了。如果大了,接下来就是猜max/4;如果小了,接下来就是猜(max/2 + max)/2。
循环第三步,应该可以很快找到正确范围。
问题关键是设计第二步的max这个数,太大了影响效率;太小了,要多次猜测才能准确设计出这个max。

这个方法也就是数据结构中的二分查找法,效率应该是算高的啦。

33,007

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧