上篇:程序员的脑力瑜伽操02-谁是凶手
公布答案啦:上篇的问题比较简单,用的思想是我们常见的“二分查找”思想。询问人通过二分思路可以很快找到凶手。
试着做下面思考:
1.询问人找到中间的那个人,也就是左数或右数第7人,如果该人是凶手,根据题目,
他会说:我是凶手,ok,询问结束。
如果他说:凶手在我左边或者右边,进行第二步。
2.在左边或右边(取决于中间人的回答)剩余的7个人中找到中间的那个人,重复第一步的问话。如果是,结束,如果第三个人回答在左或者在右,继续相同的二分问话。这样最多3次询问就可以确定凶手。
我画了个简单的说明图:
数字1、2、3代表可能询问的人,根据被询问人回答情况是左或右来决定。通过图示很容易看出来。二分查找充分利用了“指数爆炸”特性,极大的简化了问题的复杂度。
----------------------------------------------------------------------------------------------------------------
03弹:约翰麦卡锡的间谍问题
我们知道大师约翰·麦卡锡是人工智能之父,他在人工智能领域的贡献无出其右。而著名的基于λ演算的函数式编程语言lisp就由他创造。
今天我们说的问题是他在计算机领域研究时提出的一个著名问题:间谍问题。
这个问题是他给拉宾(图灵奖得主,在非确定性自动机方面有杰出贡献)出的一道难题,题目是这样的:
有两个国家处于战争状态,分别向对方国家派送间谍。间谍完成任务后要返回自己的国家,但是当他们穿越边境的时候,会有被己方守卫枪击的危险。
所以需要一套口令机制,假设间谍的素质都很高,能保守秘密。但是边境的守卫经常去酒吧喝酒聊天,因此你告诉他们什么,就等于告诉了敌方。
问题是如何设计一套方案,既能让己方的间谍安全返回,又避免敌方利用从守卫那里得到的信息把他们的间谍混进来。
PS:程序员的脑力瑜伽操系列,基本都不属于脑筋急转弯的问题,所以大家不要带着脑筋急转弯的思想去思考哦。
讨论第第二个问题回复,加上Tag02,如 Tag02:我的评论
讨论第三个问题时候加上Tag03,如 Tag03:我的评论
热烈欢迎广大猿和媛同胞展开思路,发表看法~