现在出现在你面前的是一堵朝两个方向无限延伸的墙。墙上有一扇门,但你并不确定门离你有多远,也不知道门位于哪个方向(左边或是右边)。你只有在走到门面前才能看到它。假设从当前位置到门要走n步(n大小未知),那么怎样走O(n)步就能找到那扇门?

分析

这道题让人“左右为难”,因为不确定如何才能走到尽快确定方向和位置。首先想到在错误的方向上走得越远,就意味着离正确的位置越远,因此较为保险的方法是,第一步向右走,看看有没有门;第二步——为了防止在错误的方向上渐行渐远——向左走,走两步,这样就可以确定在最初位置的一步范围内有没有门了。

接下来,按照类似的方式左右徘徊,依次确定在最初位置的2,3,...,n有没有门了。不过,直觉上就会知道走了很多冤枉路,很可能不是O(n)了。下面来具体计算一下。

假设T(n)为按上述方法确定出左右各n步范围内是否有门所需要的步数,那么

T(1) = 2 + 1

T(2) = T(1) + 2*2 + 1

T(3) = T(2) + 2*3 + 1

...

T(n) = T(n-1) + 2*n + 1

两边相加,得T(n) = n^2 + 2*n,看来这个方法太慢了。

为了更好地分析慢的原因,我们从另一个角度来看上面的方法。将寻找门的过程看作一个个回合,初始位置标记为O,第一回合向右走一步,回到O,向左走一步,回到O;第二回合向右走二步,回到O,向左走二步,回到O;。。。;第n回合向右走n步,回到O,向左走n步,回到O。这样总的步数是4*(1+2+...+n)=2(n^2+n)。每个回合仅比上一回合多一步,造成的结果就是大量的重复。但如果考虑一种极端的情况,第一回合向右走n步,回到O,向左走n步,共n步,由于不知道n的大小,这算不上是一种有效的方法,但它说明,如果我们每个回合间的跨度够大,确实有可能达到O(n)。

在常见的渐进效率类型中,比多项式明显要大的是指数级,如2^n,这里先考察这种情况。即第i回合向右走2^i步,回到O,向左走2^i步,回到O,这里0<=i<=k且2^(k-1)<n<=2^k。这样经过k个回合就可以找到门的位置,总的步数是:

可以看到,这种新的回合制是符合要求的。接下来也许可以尝试更大的跨度,如3^n或n!甚至是n*n!,这里先不讨论了。

参考:

《算法设计与分析基础》

趣题一则:寻找那扇门相关推荐

  1. 趣题:寻找出现了奇数次的数

    看到16级的做广工的新生赛某题,找一组数中出现了奇数次的两个数(其他数都出现偶数次),竟然不会= =. 解释在此:http://www.matrix67.com/blog/archives/511. ...

  2. 蓝桥杯省赛考点_【蓝桥杯单片机01】从历年决赛真题中寻找单片机常见的考点...

    [蓝桥杯单片机01]从历年决赛真题中寻找单片机常见的考点 广东职业技术学院  欧浩源 [第三届:门禁系统] 1.功能简述 "门禁系统"主要有两种工作模式: 模式1:7:00-22: ...

  3. 如何确定自己不是高智商?蒙提霍尔三扇门问题

    有一个很有意思的简单考题,许多年来我都会和遇到的聪明人探讨一下,堪称智商照妖镜,嘿嘿. "有三扇门,其中一扇门后有宝贝,另两扇门后面空的.你先选择一扇,门不打开.主持人打开你选 择之外的一扇 ...

  4. 六扇门风云/江湖风云录 4.07 宝箱 宝藏

    --浩然正气到200无法读书提升,需要到梁发那儿对话选择行侠仗义. --坑爹的华山盗匪任务,如果接到,不要点击游戏里的任何东西,直接杀进程,重进,任务会换成其它的.若重进后仍是盗匪任务,再杀进程,多试 ...

  5. 程序员的算法趣题Q25: 时髦的鞋带系法

    目录 1. 问题描述 2. 解题分析 2.1 状态表示方法 2.2 DFS 2.3 遍历下一个状态 2.4 交叉判断 3. 代码 4. 后记 1. 问题描述 即便系得很紧,鞋带有时候还是免不了会松掉. ...

  6. 《野兽绅士》总结1——整理下领结,蜕变就从推开这扇门开始

    本系列来源于笔者阅读<野兽绅士>后的总结,希望各位帮助各位单身男性找到适合自己的另一半. 目录 准备好发动引擎了吗? 蜕变:我寻访了北美所有的约会专家 做个"野兽绅士" ...

  7. 概率统计——三扇门游戏与贝叶斯定理

    本文首发于公众号:TechFlow 在概率论的课本上有一个经典的问题,一直困扰我很久.有很多次我以为我想明白了,过了一段时间却又会糊涂.这个问题学过概率论的同学想必都知道,就是著名的三扇门问题. 说是 ...

  8. 刷过一题之黑魔法师之门

    经过了16 个工作日的紧张忙碌,未来的人类终于收集到了足够的能源.然而在与Violet星球的战争中,由于Z 副官的愚蠢,地球的领袖applepi 被邪恶的黑魔法师Vani 囚禁在了Violet 星球. ...

  9. 100%的程序员都想挑战的算法趣题!| 码书

    计算机的世界每天都在发生着深刻的变化.新操作系统的发布.CPU性能的提升.智能手机和平板电脑的流行.存储介质的变化.云的普及--这样的变化数不胜数. 在这样日新月异的时代中,"算法" ...

最新文章

  1. WebServlet 4.0
  2. RocketMQ消息丢失场景及解决办法,已拿offer入职
  3. 5、jeecg 笔记之 minidao 条件判断
  4. Vue 犯罪指南:TypeError: Right-hand side of 'instanceof' is not an object
  5. Java基础篇:finalize( )方法的使用
  6. JS屏蔽360浏览器代码
  7. 手机qq邮箱html,QQ邮箱
  8. 4米乘以12米CAD图_CAD套图技巧大揭秘及坐标问题小结
  9. 招财宝计算器android,招财宝收益计算器
  10. 刚培训的java程序员怎么找工作,快来看鸭~
  11. openGL之API学习(七十八)SPIR-V
  12. 分治法解决赛程安排问题
  13. 深度学习:GCN(图卷积神经网络)理论学习总结
  14. python自学软件-学习python用什么软件
  15. 风帆头,旗帜服,“背”在肩上的古国王印
  16. 【转】8家公司笔面试经历-百度-联发科-瑞晟--
  17. 精美底部营销通用型插件(客服+电话+微信)按钮
  18. PS创意合成犀牛背上的美女(附素材)
  19. 计算机专业考研视频汇总
  20. Day4-2 retrofit

热门文章

  1. Facebook悄悄参加星际AI大赛,然后输了 | 中国团队夺得第四
  2. 个人练习-jq 鼠标移上移出查看图片(放大)提示
  3. cygwin 解决 乱码问题 (转)
  4. td和div超出部分隐藏的区别和用法
  5. Asp.net MVC3 RTM的源代调试
  6. 发现一款好用的备份新浪博客的工具
  7. div+css布局与seo的关系
  8. Hadoop概念学习系列之Hadoop HA进一步深入(二十八)
  9. 【云栖大会】“天”与“人”的大数据
  10. mybatis 批量插入的两种方式