加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

[原创]破解面试智力题 -- 真话假话守卫问题

(2014-12-28 14:05:02)
标签:

智力题

分类: 算法

号称苹果招聘八大难题的第一个,就是这个古老的寻宝问题:

   

    你面前有两扇门,其中一扇门内藏着宝藏。守卫这两扇门的有两个人,他们都知道哪扇门后有宝藏,但是他们一个人只说真话,另一个人只说假话。你可以向这两个守卫中的任意一人问一个问题,该问什么问题从而找到宝藏呢?


要确定宝藏所在,所设计的问题必须能够满足(1)同样的问题在问两个人时得到的答案是不同的;(2)根据答案能够确定被问之守卫的门后是否有宝藏。


如果将现实条件构成一个两维的平面,那么真话守卫和假话守卫是其中的一维,而有宝藏和无宝藏是另外的一维。我们的问题将是关于这两维的一个函数,答案是第三维,它告诉我们守卫门后是否是宝藏。如果我们的问题是个与第三维相类的一重逻辑,比如“你守的是宝藏吗?”,那么这两个守卫的回答一定是相同的,因而无法做出判断,如下面左图所示,实线表示第三维的答案“守宝藏”,虚线表示第三维的“守虚无”。而我们的目标是得到右图的答案映射,也就是说无论守宝藏的是真话守卫还是假话守卫,他们的回答一定是“守宝藏”,反之亦然。


http://s4/mw690/001xx3uygy6OJF3FvA743&690-- 真话假话守卫问题" TITLE="[原创]破解面试智力题 -- 真话假话守卫问题" />

我们将真话守卫标记为1,假话守卫为0;守宝藏标记为1,守虚无为0。左图可以表示为

http://s14/small/001xx3uygy6OJHjuUOh2d&690-- 真话假话守卫问题" TITLE="[原创]破解面试智力题 -- 真话假话守卫问题" />

而右图则是

http://s9/mw690/001xx3uygy6OJHtEDFK28&690-- 真话假话守卫问题" TITLE="[原创]破解面试智力题 -- 真话假话守卫问题" />

注意到函数第二维自变量和第三维因变量含义是一致的,因此可以做变量代换如下(函数第二维作了映射):

http://s3/bmiddle/001xx3uygy6OJHVMCTE02&690-- 真话假话守卫问题" TITLE="[原创]破解面试智力题 -- 真话假话守卫问题" />

问题解决,我们要问的问题就是f(1, 1),即“真话守卫守的是宝藏吗?”,或者是其等价问题。


再换另外一个思路来解决问题。要满足前面提到的两个条件,我们希望在现实情况的激励下守卫答案输出的是明确的守卫状态,即“守宝藏”输出1,“守虚无”输出0。守卫位置是一个输入变量,门后内容是另一个输入变量,对应的输出也有两个,分别是两个守卫的回答。据此构造卡诺图如下,左边是真话守卫的激励输出,右边是假话守卫的激励输出,两者恰好互逆。可以看出此输出的状态机是一个同或函数,即“真话守卫与宝藏处于相同位置”,所以构造的问题就是“真话守卫守的是宝藏吗?”。


http://s4/mw690/001xx3uygy6OJKza0Txd3&690-- 真话假话守卫问题" TITLE="[原创]破解面试智力题 -- 真话假话守卫问题" />


附:苹果招聘八大难题

http://news.xinhuanet.com/tech/2012-06/19/c_123303367.htm

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有