zoukankan      html  css  js  c++  java
  • 天使和魔鬼(转载)

    发信站: 饮水思源 (2004年05月25日19:32:28 星期二)

    一道智力题的逻辑解法和讨论
    一.    问题
    喜欢做IQ题的人肯定做过一道关于魔鬼和天使的题目,题目大概是这样的:
    有一个岔道口,岔道口两边有两扇门,一扇通往天堂,一道通往地狱,门口都站着一个卫
    兵,一个是天使,一个是魔鬼,天使永远只说真话,魔鬼永远只说假话,但是天使不一定
    就是站在天堂门口的,魔鬼也不一定站在地狱门口,这时候有个人想去天堂,但是他只能
    问其中一个卫兵一个问题,而且回答的人只能用是与不是回答,问他应该问怎样一个问题
    ,才能正确的到达天堂?
    二.    解答
    这道题是里面的卫兵只能用是与不是回答问题,很明显是一道数理逻辑的问题,如果我们
    将这道题用数学公式描述一下,会发现这道题其实很简单的。
    这道题一个只有四种情形:
    1. 天使站在天堂门口,人站在天堂门口;
    2. 天使站在天堂门口,人站在地狱门口;
    3. 天使站在地狱门口,人站在天堂门口;
    4. 天使站在地狱门口,人站在地狱门口。
    人只能问一个问题,那么答案只能作出一个判断,一个判断只能分析出一种情形,人需要
    的是他是否站在天堂还是地狱门口,那么显然天使站在那个门口这个情形将要在提出的问
    题中条件归并掉,那么意味着这个人要提出的问题,不管卫兵是天使还是魔鬼,只要它回
    答“是”,就意味着他后面是天堂,回答“不是”就意味着后面是地狱,这样这个人才能
    找到正确的通往天堂之门。(当然,我们也可以提出这种问题,不管卫兵是天使还是魔鬼
    ,只要它回答“不是”,就意味着他后面是天堂,回答“是”就意味着后面是地狱,我们
    先作前面那种假设,这种情况在后面的“花色”中我们将会讨论)
    我们假设两个逻辑变量:
    1.  变量x,当x=1时表示天使站在天堂门口(魔鬼站在地狱门口),当x=0时表示天使站在
    地狱门口(魔鬼站在天堂门口)。
    2.  变量y,当y=1时表示人站在天堂门口,y=0时表示人站在地狱门口。
    这个人要提出的问题,不管卫兵是天使还是魔鬼,只要它回答“是”,就意味着他后面是
    天堂,回答“不是”就意味着后面是地狱,这个问题就是一个关于x,y的数理函数,我们假
    设为P(x,y),P(x,y)=0表示对于这个问题的正确判断应该是“不是”,而P(x,y)=1表示对
    这个问题的回答应该是“不是”,但是由于魔鬼会撒谎,因此当P(x,y)=0时魔鬼会回答“
    是”,而P(x,y)=1时魔鬼会回答“不是”,我们可以得出这个函数为:
    P(0,0)=0;
    P(0,1)=0(魔鬼会撒谎);
    P(1,0)=1(魔鬼会撒谎);
    P(1,1)=1;
    画P的卡诺图:
    Y   X   0   1
    0   0   1
    1   0   1
    图一
    合并单元格得:
    P(x,y)=x
    翻译成自然语言就是就是这个人只要问“天使站在天堂门口吗?”,只要卫兵回答“是”
    ,那么表示后面就是天堂,如果回答“不是”,后面就是地狱了。
    三.    探讨:
    那么,我们只有一个答案么?显然不止,我们还可以从多个方面来获得多个答案:
    1.变换数理公式:
    我们知道,数理攻势可以变化的,比如上题:
    P(x,y)=x=x(y+^y)=xy+x^y
    不过是同一个数理公式经变换后的两种自然语言描述而已。
    之所以加入这个讨论,是因为往往很多自然语言描述简单的攻势用数理语言描述并不简单
    ,而用数理语言描述简单的公式用自然语言描述并不简单
    2.花色
    1)花色定义
    (花色是我自己提出的一个名字,不知道在数理逻辑中是否有类似的研究,如果有的话我
    也献丑了)
    开始我们提到了,我们也可以提出这种问题,不管卫兵是天使还是魔鬼,只要它回答“不
    是”,就意味着他后面是天堂,回答“是”就意味着后面是地狱。按照这样的提问我们可
    以按照解答的方法得出卡诺图:
        XY  0   1
             0  1   0
             1  1   0
    图二
    那么答案就是
    P(x,y)=^x
    那么自然语言就是:天使后面是地狱。同样只要卫兵回答“不是”,那么表示后面就是天
    堂,如果回答“是”,后面就是地狱了,同样也能找出正确的答案。
    可以看出,卡诺图一和图二除了0,1相反,位置都是一样的,那么我们可以定义这种卡诺
    图为“花色相似”。
    按照花色相似,我们可以画出这道题中所有的花色:
    XY  0   1
    0   1   0
    1   1   0
    图三
    XY  0   1
    0   0   0
    1   1   1
    图四
    XYX 0   1
    0   1   1
    1   1   1
    图五
    XY  0   1
    0   1   0
    1   0   1
    图六
    注意:在图三-图六的0,1值并不表示实际的0,1值,而只是表示一种花色。

    假如这道智力题的问题不是“人怎样才能正确到达天堂”,而是问“天使是否站在正确的
    位置(天使应该站在天堂门口,智力题可以改成上帝来查岗)”,我们解答时应该用卡诺
    图四来解答
    由图四我们可以得出数理函数:
    P(x,y)=y,它用自然语言描述就是人问道“我是站在天堂门口吗?”。不管回答这个问题
    的卫兵是天使还是魔鬼,只要回答“是”表示天使就站在天堂门口,回答“不是”就表示
    天使站错地方了。

    图五是一个恒真式,翻译成自然语言可以是“1+1=2吗?”,它可以解答的智力题应该为
    “人面前是天使吗?”,如果是天使那么回答的就是“是”,是魔鬼就是“不是”。

    图六是一个更复杂的公式,大家可以想想这个公式的自然语言怎么描述,而且智力题的问
    题应该怎么改:)

    我们知道,人如果既要知道天堂怎么走,又要知道天使是谁,那么他应该问两个问题,才
    能确定他是在前面提到的四种情形种的那一种,综合图三和图四,我们知道这两个问题是
    “天使站在天堂门口吗?”和“我是站在天堂门口吗?”。

    其实从上面解答和讨论过程可以看出,魔鬼撒谎与否对我们这道题的解决都是没有什么关
    系的,如果魔鬼不撒谎,我们要知道天堂在哪同样需要问一个问题,谁是魔鬼,也要再问
    一个问题,也就是说从数里逻辑推导来看,题目中魔鬼撒不撒谎都是无所谓的。但是如果
    魔鬼撒谎,以人脑来推导显然要比魔鬼不撒谎难得多。那么我们是否可以通过某种变换,
    可以将魔鬼撒谎和不撒谎这两种情况相互转换呢?也就是说,可以定义在魔鬼撒谎不撒谎
    之间定义某种同构(类似于群),这样的话,我们只要在魔鬼不撒谎的情况下得出答案,
    然后转换到魔鬼撒谎的情况下就可以了,对于卡诺图而言,就是图三和图四对图六的花色
    变换,研究花色变换将会很有利于我们的工作的。

  • 相关阅读:
    【AHOI2009】 维护序列
    Codeforces Hello 2019 F. Alex and a TV Show[bitset+莫比乌斯反演]
    Codeforces Hello 2019 D. Makoto and a Blackboard[DP+数论+概率期望]
    Codeforces Hello 2019 ABCDF题解
    [BZOJ1042][HAOI2008]硬币购物[容斥原理+背包]
    Codeforces Round #529 (Div. 3)题解
    [BZOJ4311]向量[线段树分治+计算几何+二分/三分]
    [BZOJ1076][SCOI2008]奖励关[状压DP+概率期望]
    [POJ3368][UVA11235] Frequent values[ST表]
    [USACO5.5]矩形周长Picture[扫描线+线段树]
  • 原文地址:https://www.cnblogs.com/dayouluo/p/92309.html
Copyright © 2011-2022 走看看