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吗?”,它可以解答的智力题应该为
    “人面前是天使吗?”,如果是天使那么回答的就是“是”,是魔鬼就是“不是”。

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

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

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

  • 相关阅读:
    How To Build CyanogenMod Android for smartphone
    CentOS安装Code::Blocks
    How to Dual boot Multiple ROMs on Your Android SmartPhone (Upto Five Roms)?
    Audacious——Linux音乐播放器
    How to Dual Boot Multiple ROMs on Your Android Phone
    Everything You Need to Know About Rooting Your Android Phone
    How to Flash a ROM to Your Android Phone
    什么是NANDroid,如何加载NANDroid备份?
    Have you considered compiled a batman-adv.ko for android?
    BATMAN—Better Approach To Mobile Adhoc Networking (B.A.T.M.A.N.)
  • 原文地址:https://www.cnblogs.com/dayouluo/p/92309.html
Copyright © 2011-2022 走看看